SHELL 编程入门与提高(三)SHELL中的语句详解(下)

来源:互联网 发布:淘宝差评对卖家的影响 编辑:程序博客网 时间:2024/05/19 00:13

for语句

pdksh/bashfor语句的第一种形式是:

for curvar in listdo     statementsdone
这个语句的意思是,对于list中的没一个值,执行语句statements。对于每一次循环,list中的当前值被赋值给curvarlist可以是包含一系列取值的变量,也可以是空格分开的取值。

pdksh/bashfor语句的第二种形式是:

for curvardo     statementsdone

这个for语句对于传递给shell程序的每一个位置参数,执行statements语句。每次循环时,位置参数的当前值被赋值给变量curvar。这种形式也可以写成:

for curvar in $do     statementsdone
tcsh中,for语句被叫做foreach,形式如下:

foreach curvar (list)     statementsend
这个for语句,对于list中的每一个值执行一次statements语句。每次循环时,list的当前值复制给curvar

while语句

while语句在指定条件满足的情况下执行一系列的命令,直到该条件不再满足。

pdksh/bash下,while控制语句的形式为:

while expressiondo     statementsdone

tcsh下,while语句的形式为:

while (expression)     statementsend

until语句

until语句用来执行一系列的命令,直到指定的条件满足。

pdksh/bash下,until语句的形式为:

until expressiondo     statementsdone

可以看到,until语句和while语句的形式非常相似,但是逻辑是完全相反的。在while循环中,执行命令直到表达式为假;而在until语句中,循环直到表达式为真。这个区别最终要的地方在于while循环可能被执行0次或任意多次;但是until会被执行1次或任意多次,至少会被执行一次。

tcsh不支持until循环语句。

repeat语句(tcsh

repeat语句是用来执行某一条命令固定数目次。例如,你想输出/打印连接号(-80次,每行一个连接号,可使用以下语句:

repeat 80 echo '-'

select语句(pdksh

select语句是当你写shell程序期望用户在线输入时用来生成一个菜单列表,select语句的形式为:

select item in itemlist    do      statementsdone

其中itemlist是可选项。如果没有提供itemlist时,对于每一个item系统执行一次循环。当提供itemlist时,对于itemlist的每一项进行循环,在循环过程中,将itemlist的当前值赋值给item。例如你想要提供给用户一个菜单选项,选择Continue或者Finish,你可以使用以下shell程序来实现。

#!/bin/kshselect item in Continue Finish do     if [ item = “Finish” ]; then         break     fi done
当这个select程序被执行时,系统会显示一个数字菜单给用户——在这里例子中,1代表Continue2代表Finish。如果用户选择1,变量item将会获得一个值Continue;如果用户选择2,变量item将会获得一个值Finish,此时if语句执行,循环结束。

shift语句

shift语句是用来处理位置变量的,一次一个,按照从左到右的顺序。位置变量被定义为$1$2$3……$0是命令的名字。shift命令的作用就是使得每一个位置变量左移一位,当前的$1参数将会丢失。Shift语句的形式为:

shift number
参数number是移动的数目,是个可选项。如果没有指定number,则默认值为1,也就是参数都左移一位;如果指定number,则参数左移number位。

if语句

if语句根据逻辑表达式的取值决定执行的分支。在pdksh/bash下,if语句的形式为:

if [ expression ]; then     statementselif [ expression ]; then     statementselse     statementsfi

tcsh下,if语句有两种形式,第一种形式类似于pdksh/bash的形式,如下:

if (expression) then     statementselse if (expression) then     statementselse     statementsendif
tcsh下的if条件语句的另一种形式为:

if (expression) command
这种形式下,只有一条命令被执行,当if条件满足时。

case语句

pdksh/bash下,case语句的形式如下:

case str in    str1 | str2)        statements;;    str3 | str4)        statements;;    *)        statements;;esac
我们用一个简单的例子来说明case语句的用法。在这个例子中,通过数字作为参数来输出星期几,当数字不属于17时,输出错误信息。程序如下:

#!/bin/shcase $1 in01 | 1) echo “Today is Monday”;;02 | 2) echo “Today is Tuesday”;;03 | 3) echo “Today is Wednesday”;;04 | 4) echo “Today is Thursday”;;05 | 5) echo “Today is Friday”;;06 | 6) echo “Today is Saturday”;;07 | 7) echo “Today is Sunday”;;*) echo “Invalid parameter”;;esac
每一个分支语句必须以;;结束,否则,下一条分支语句会继续执行。

tcshcase语句的形式为:

switch (str)    case str1 | str2:        statements        breaksw    case str3 | str4        statements        breaksw    default:        statements        breakswendsw

上面那个通过输入数字来输出星期几的例子在tcsh下的程序为:

#!/bin/tcshset day = 5switch ( $day )case 1: echo “Today is Monday”; breakswcase 2: echo “Today is Thuesday”; breakswcase 3: echo “Today is Wednesday”; breakswcase 4: echo “Today is Thursday”; breakswcase 5: echo “Today is Friday”; breakswcase 6: echo “Today is Saturday”; breakswcase 7: echo “Today is Sunday”; breakswdefault: echo “Oops! Day is Error!” ; breakswendsw

breakexit语句

我们需要掌握breakexit的用法。break通常被用来终止一个循环,比如foruntilrepeat命令。exit语句通常用来终止一个shell程序。你可以通过exit返回一个数值,当其他程序调用这个shell程序时,可以通过返回的这个数值($?或者$status变量)来作出相应的决策。