pdksh/bash下for语句的第一种形式是:
for curvar in list do statements done这个语句的意思是,对于 list 中的没一个值,执行语句 statements 。对于每一次循环, list 中的当前值被赋值给 curvar 。 list 可以是包含一系列取值的变量,也可以是空格分开的取值。
pdksh/bash下for语句的第二种形式是:
for curvar do statements done
这个for语句对于传递给shell程序的每一个位置参数,执行statements语句。每次循环时,位置参数的当前值被赋值给变量curvar。这种形式也可以写成:
for curvar in $ do statements done在 tcsh 中, for 语句被叫做 foreach ,形式如下:
foreach curvar (list) statements end这个 for 语句,对于 list 中的每一个值执行一次 statements 语句。每次循环时, list 的当前值复制给 curvar 。
while语句在指定条件满足的情况下执行一系列的命令,直到该条件不再满足。
pdksh/bash下,while控制语句的形式为:
while expression do statements done
在tcsh下,while语句的形式为:
while (expression) statements end
until语句用来执行一系列的命令,直到指定的条件满足。
在pdksh/bash下,until语句的形式为:
until expression do statements done
tcsh不支持until循环语句。
repeat语句是用来执行某一条命令固定数目次。例如,你想输出/打印连接号(-)80次,每行一个连接号,可使用以下语句:
repeat 80 echo '-'
select语句是当你写shell程序期望用户在线输入时用来生成一个菜单列表,select语句的形式为:
select item in itemlist do statements done
其中itemlist是可选项。如果没有提供itemlist时,对于每一个item系统执行一次循环。当提供itemlist时,对于itemlist的每一项进行循环,在循环过程中,将itemlist的当前值赋值给item。例如你想要提供给用户一个菜单选项,选择Continue或者Finish,你可以使用以下shell程序来实现。
#!/bin/ksh select item in Continue Finish do if [ item = “Finish” ]; then break fi done当这个 select 程序被执行时,系统会显示一个数字菜单给用户——在这里例子中, 1 代表 Continue , 2 代表 Finish 。如果用户选择 1 ,变量 item 将会获得一个值 Continue ;如果用户选择 2 ,变量 item 将会获得一个值 Finish ,此时if语句执行,循环结束。
shift语句是用来处理位置变量的,一次一个,按照从左到右的顺序。位置变量被定义为$1,$2,$3……。$0是命令的名字。shift命令的作用就是使得每一个位置变量左移一位,当前的$1参数将会丢失。Shift语句的形式为:
shift number参数 number 是移动的数目,是个可选项。如果没有指定 number ,则默认值为 1 ,也就是参数都左移一位;如果指定 number ,则参数左移 number 位。
if语句根据逻辑表达式的取值决定执行的分支。在pdksh/bash下,if语句的形式为:
if [ expression ]; then statements elif [ expression ]; then statements else statements fi
在tcsh下,if语句有两种形式,第一种形式类似于pdksh/bash的形式,如下:
if (expression) then statements else if (expression) then statements else statements endiftcsh 下的 if 条件语句的另一种形式为:
if (expression) command这种形式下,只有一条命令被执行,当 if 条件满足时。
在pdksh/bash下,case语句的形式如下:
case str in str1 | str2) statements;; str3 | str4) statements;; *) statements;; esac我们用一个简单的例子来说明 case 语句的用法。在这个例子中,通过数字作为参数来输出星期几,当数字不属于 1 ~ 7 时,输出错误信息。程序如下:
#!/bin/sh case $1 in 01 | 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每一个分支语句必须以 ;; 结束,否则,下一条分支语句会继续执行。
tcsh下case语句的形式为:
switch (str) case str1 | str2: statements breaksw case str3 | str4 statements breaksw default: statements breaksw endsw
上面那个通过输入数字来输出星期几的例子在tcsh下的程序为:
#!/bin/tcsh set day = 5 switch ( $day ) case 1: echo “Today is Monday”; breaksw case 2: echo “Today is Thuesday”; breaksw case 3: echo “Today is Wednesday”; breaksw case 4: echo “Today is Thursday”; breaksw case 5: echo “Today is Friday”; breaksw case 6: echo “Today is Saturday”; breaksw case 7: echo “Today is Sunday”; breaksw default: echo “Oops! Day is Error!” ; breaksw endsw
我们需要掌握break和exit的用法。break通常被用来终止一个循环,比如for,until,repeat命令。exit语句通常用来终止一个shell程序。你可以通过exit返回一个数值,当其他程序调用这个shell程序时,可以通过返回的这个数值($?或者$status变量)来作出相应的决策。