Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3228028
  • 博文数量: 346
  • 博客积分: 10189
  • 博客等级: 上将
  • 技术积分: 3125
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-05 19:46
文章分类

全部博文(346)

文章存档

2013年(35)

2011年(35)

2010年(76)

2009年(48)

2008年(152)

分类:

2008-09-17 19:53:55

一. while 循环 
while 命令格式 

while 条件表 
do 
命令表 
done 

执行过程 

shell首先执行条件表,如果条件表的最后一条语句的退出状态为零,则执行盾环体内的命令 
表,执行完后,再检查条件表,如果退出状态为零将继续执行,如此循环往复直到条件表的 
最后一条语句的退出状态非零. 退出状态为零就是条件为真True. 

举例说明 假如shell文件的内容如下: 

Sum=0 
i=0 
while true #true是系统的关键词 表示真 
do 
i=`expr $i + 1` 
Sum=`expr $Sum + $i` 
if [ $i = "100" ] 
then 
break; 
fi 
done 
echo $i $Sum 
最后这个程序显示的是 100 5050 
这个程序的运算就是将1到100加起来 

下面将这个程序再改动一下 


Sum=0 
i=0 
while [ $i != "100" ] 
do 
i=`expr $i + 1` 
Sum=`expr $Sum + $i` 
done 
echo $i $Sum 

改动后的程序运算结果和上面是一样 但程序比上面的要简练 

在这个循环中还可以以until做为测试条件 它正好与while测试的条件相反,也就是当条件为假时将继续执行循环体内的语句,否则就退出循环体,下面还用这个例子. 


Sum=0 
i=0 
until [ $i = "100" ] 
do 
i=`expr $i + 1` 
Sum=`expr $Sum + $i` 
done 
echo $i $Sum 
当i不等于100时循环 就是当条件为假时循环,否则就退出,而第一个例子是当i不等于100 
时循环,也就是测试条件为真时循环. 

二.for 循环 

命令格式: 
for 变量 in 名字列表 
do 
命令列表 
done 

这里的名字列表是一个由空格分隔的字符串列表,shell在执行for循环时每次依次从名字表 
中取出一个字符串赋给循环变量作为变量的值. 
在写for语句时,也可以省略in 名字列表部分,这表示用当前的位置参数来代替这时的名 
字列表. 
下面举个例子 
比如在你的电脑中有两个目录,一个是aa,一个是bb在这两个目录中有5个相同的文件,但其 
中一个目录中的一个或多个文件刚刚修改过,现在我忘记刚才改的是那几个文件 了,那么我靠梢员冉弦幌抡饬礁瞿柯嫉奈募?椭?懒?程序如下: 

for File in a1 a2 a3 a4 a5 
do 
diff aa/$File bb/$File 
done 

下面再举一个不带名字列表的例子 

for File 
do 
echo $Filw 
done 

文件内容保存在a.sh中 并可执行 
我们在执行这个shell程序时命令行如下: 
a.sh a1 a2 a3 a4 a5 
执行结果如下: 
a1 
a2 
a3 
a4 
a5 
大家从这个例子中可以看到命令行的参数被逐一读入一次 
三.循环控制语句 
break 命令不执行当前循环体内break下面的语句从当前循环退出. 
continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行. 

一,命令组合:圆括号和花括号 
shell中有两种方法将命令组合在一起:圆括号和花括号.圆括号使shell创建一个子shell 
来读取并执行括起来的名命令.左括号和右括号不论出现在命令行中的什么位置,shell都会 
认为它们具有特殊的组合意义的.只有用双引号将它们括起来引用,才表示圆括号或花括号 
的原义.例如: 

echo a(b) 
将出现语法上的错误,要想输出a(b)字符串 只能括起来 
echo "a(b)" 
或echo a"("b"
这样才能被shell正确解释. 
利用组合命令有什么作用呢? 
一,用圆括号组合命令 
圆括号的组合命令可以创建子进程运行组合程序,建立子进程的功能是很有用的,因为 
子shell在组合命令中的种种操作都不会影响到当前shell的各变量的值. 
例如: 
子进程在执行组合命令时改变了工作目录,并在新的工作目录下执行一系例命令,执行 
完后它可以不必返回原工作目录,因为子进程工作目录的改变不会影响到当前工作目录. 

创建子进程后将当前的环境也同样传给子shell,当前shell中用export输出到环境中的 
各变量在子shell中同样有效. 


花括号也可以将命令组合在一起.左 右花括号只有作为一条命令的第一个字出现时, 
shell才它们含有特殊含义. 
与圆括号不同的是花括号并不创建子shell,只是由当前的shell来读取并执行括起来的 
命令.有时用户希望使用一组命令的顺序输出作为另一组命令的输入,此时用花括号是很方 
便的. 
不论是用圆括号不是花括号,退出状态都是等于最后一条括起来的命令的退出状态. 


二,可以在当前shell中执行的命令 

用户在使用shell时一定要了解那些是可以在当前shell中执行的命令 那些不可以 
可以在当前shell中执行的命令有: 

break case cd continue 
echo eval exec exit 
export for if read 
readonly return set shift 
test times trap umask 
until wait while 
: {}
阅读(15693) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-10-12 10:21:21

恩,很好,简单易懂

BruceShea2008-09-20 10:25:26

对初学者有点用!