UNIX基本的知识(8)

2019-06-04 22:26

Aqiaqia * Application

循环语句通常使用一个增长的数字变量来进行控制。使用let命令,可以在shell脚本中使用算术表达式。这个命令允许使用长的整数运算。在上例中,expression代表一个shell变量的算术表达式和能够被shell识别的操作符,而(( ))可以 代替let命令。shell能够识别的表达式如下所示:

操作符?????描述 -????? ??减去 !????? ??逻辑相反 * / %????? 乘,除,余数 + - ??????加,减 <= ?>= ??关系比较 == !=????? 等于不等于 =??????? 赋值

括号能够被用作改变表达式中计算的顺序,就像在 let \ 中一样

注意双引号被用来忽略括号的特殊含义。同样,如果你希望使用空格来分隔操作符和操作符的时候,就必须使用双引号,或者(( ))语句: let \或者(( x= x+ (y / 2) ))

当使用逻辑和关系操作符,(!,<=,>=,<,>,++,~=),的时候,shell会返回一个代码变量,?会反映结果是真还是假,再一次说明,必须使用双引号来防止shell将大于和小于运算符当作I/O重定向。

3.while语句

重复执行循环体,直到条件为真 语法:

while?????????????? ?? list A do

?? list B done 例子:

$ cat test_while X=1

while (( X <= 10 )) do

??echo hello X is $X ??let X=X+1 done

$ test_while hello X is 1 hello X is 2 .

36

Aqiaqia * Application

. .

hello X is 10

while语句是shell提供的一种循环机制,当条件为真的时候它允许循环体中的命令(list B)继续执行。条件判断是通过list

A中最后一个命令的返回值来进行。通常一个test或者let命令被用作控制循环的执行,但是任何命令都能被用来产生一个返回值。

上面的例子中使用的是test命令可以用let命令来代替,如下: $ X=1

$ while [ $x -le 10 ] > do

> ??echo hello X -s $X >?? let X=X+1 > done

命令执行的过程如下:

1.list A中的命令被执行。

2.如果list A中的最后一个命令的返回值为0(真),执行list B。 3.回到第一步。

4.如果list A中的最后一个命令的返回值不为0(假),跳到下面done关键字后的第一个命令。 提醒:注意while循环会无穷执行下去,因为有一些循环的控制命令的返回值永远为真。

$ cat while_infinite while ?? true do

?? echo hello done

$ while_infinite hello hello . . .

ctrl + c

4. while结构举例

例A:???????????????例B

如果ans为yes就重复执行 ???????????当有命令行参数时重复执行

37

Aqiaqia * Application

ans=yes???????????????while (($# != 0 )) while ??????????????? do

[ \???????????if test -d $1 do ??????????????????then

??echo Enter a name??????????echo contents of $1; ??read name??????????????ls -F $1 ??echo $name >> file.names????? fi ??echo \????????? shift

??echo Enter yes or no??????? echo There are $# items ??read ans????????????? echo left on the cmd line done ????????????????done?

上例是两个while语句的例子,例A提示用户输入,然后对用户的输入进行判断,来决定是否继续执行循环,例子B中,循环会对命令行中每一个参数进行判断,如果参数是一个目录,这个目录中的内容会被显示出来。如果这个参数不是一个目录,程序会跳过。注意shift命令的用法,它允许一个一个存取每一个参数。和while命令一起使用可以使这个循环非常灵活。它不关心参数的个数是1个还是100个,循环会继续执行直到所有的参数都被存取。

注意,如果你希望循环至少执行一次,就必须进行某些设臵。例A中会执行循环体至少一次因为ans已经被设为yes。在例B中,如果程序的执行不带任何参数($#等于0),这个循环就一次都不会执行。

5.until语句

重复循环直到条件为真为止。 语法:??????例子:

until???????$ cat test_until ?list A????? X=1

do???????? until (( x > 10 )) ?list B????? do

done?????????echo hello X is $X ???????????let X=X+1 ????????? done

????????? $ test_until ????????? hello X is 1 ????????? hello X is 2 ????????? hello X is 3 ???????????. ???????????. ???????????.

????????? hello X is 10

until语句是shell提供的另一种循环机制,它会持续执行命令(list B)直到一个条件为真为止。同while循环类似,条件判断由list A中的最后一条命令的返回值来决定的。

38

Aqiaqia * Application

命令的执行过程如下:

1.list A中的命令被执行。

2.如果list A中最后一条命令的返回值为非0(假),执行list B。 3.返回到第一步。

4.如果list A中的最后一条命令的返回值为0(真),跳到done关键字后的第一条命令。

注意:until循环的无穷执行下去,因为有些循环语句中的控制语句的返回值始终为假。

$ x=1 $ until

> [ $ x -eq 0 ] > do

> echo hello > done hello hello hello . . .

ctrl + c

6.until的例子

例A???????????????例B

重复执行循环体直到ans为no为止 ???????重复执行循环直到没有命令行参数为止

ans=yes?????????????? until until ? ????????????? do

? [ \????????? if test -d $1 do ????????????????? then

echo Enter a name??????????? echo context of $1; ?read name ??????????????ls -F $1 ?echo $name >> file.names??????fi ?echo \??????????shift

?echo Enter yes or no????????echo There are $# items ?read ans ????????????? echo left on the cmd line. done????????????????done

上例的结构与while语句中的例子类似,但是使用until语句来。注意在两种语句的test条件的逻辑关系是相反的。

同时请注意用户输入的敏感性由一些轻微的变化。使用while语句,只有用户的输入的字符串为“yes”时循环才会执行,继续执行循环的条件十分严格,使用until语句,循环会在用户使用与no不同的任何字符时都会执行。它对于继续进行循环的条件不太严格,你也许希望在决定那一种结构最符合你的要求的时候考虑这一特征。

39

Aqiaqia * Application

预定义ans变量的值不再是必须的,因为它的值会被初始化为NULL,由于NULL不等于no,test会返回假,而循环会被执行。你仅仅需要将$ans用括号引起来,以免在test语句执行时发生语法错误。

shell编程之循环

shell编程之循环语句(2) 7.for语句

对列表的每一条目都进行一次循环过程,每完成一次循环过程就将var赋予列表中下一个条目,直到完成最后一个条目的循环为止

语法: ???????????例子:

for var in list????????$ cat test_for do?????????????? for X in 1 2 3 4 5 ???list A????????? do

done????????????? echo \ ??????????????? let X=X*2 ??????????????? echo $X ??????????????? done

??????????????? $ test_for ??????????????? 2 * 1 is 2 ??????????????? 2 * 2 is 4 ??????????????? 2 * 3 is 6 ??????????????? 2 * 4 is 8 ??????????????? 2 * 5 is 10

在上例中,关键字为for,in,do和done,var代表一个shell变量的名字,这个变量的赋值会贯穿for循环的执行过程中,list是一串由空格或者tab分割开的字符串,在每一次循环执行都要将一个串赋值给var。 for循环的执行过程如下:

1.shell变量var被设臵等于list中的第一个字符。 2.list A中的命令会被执行。

3.shell变量var被设臵等于list中下一个字符。 4.list A中的命令被执行。

5.循环会持续执行,直到每一个list中的条目都执行过循环为止。

8.for循环的例子 例A:

$ cat example_A

for NAME in $(grep home /etc/passwd | cut -f1 -d:) do

??mail $NAME < mtg.minutes

??echo mailed mtg.minutes to $NAME

40


UNIX基本的知识(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016年钟秀勇民法模拟题(钟秀勇2016年4月10日)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: