一般用于整数值,也可以用于字符串;
格式:expr argument operator argument
expr 也是个手工命令行的计数器
expr在循环中用于增量计算,首选,循环初始化为0,然后循环加1,常用的做法:从expr接受输出赋给循环变量
例:
可以用expr测试一个数,如果对非整数进行计算,则返回错误
例:
注 expr 也有返回的状态,但与系统最后返回的值刚好相反,expr返回成功为1,其他值为失败。
例:
格式:
if 条件1 then 命令1 elif 条件2 then 命令2 else 命令3 fi注意:使用if语句时,必须将then部分放在新行,否则会产生错误,如果要不分行,必须使用命令分割符,即:
if 条件1; then 命令1 fi例:$ vi myfile
#!/bin/sh DIRECTORY=$1 if [ "`ls -A $DIRECTORY`" = "" ] ; then echo "$DIRECTORY is indeed empty" else echo "$DIRECTORY is not empty" fi 3.4 for 循环格式:
for 变量名 in 列表 do 命令1 命令2 done说明:命令 可为任何有效的shell命令和语句
变量名可以为任何单词
in列表是可选的,如果没有列表,for循环会使用命令行的位置参数
in列表可以包含替换,字符串,文件名
例:
#!/bin/sh for loop1 in 1 2 4 5 6 #数字列表 do echo $loop1 done for loop2 in he is a tall man #字符串列表 do echo $loop2 done for loop3 in `ls` #替换列表 do echo $loop3 done对for 循环使用参数,当循环中省去in列表选项时,它将接受命令行特定变量做为参数即
for params in "$@" 或者 for params in "$*"例1:
#!/bin/sh for params in "$@" do echo "You supplied $params as a command line option" done echo $params例2
#!/bin/sh counter=0 for files in `ls` do counter = `expr $counter + 1` done echo "There are $counter files in `pwd`" 3.5 while和until循环while循环
格式:
note:do和done之间命令,只有前一个返回状态为0,后面命令才会被执行;否则则循环中止
until循环
格式:
note:until执行一系列命令,只至条件为真时停止,循环至少执行一次。
例1:
#!/bin/sh echo "Type <Ctrl-D> to terminate" echo -n "enter your favorate film :" while read FILM do echo "Yeah,great film the $FILM" done使用ctrl-D中断脚本的执行,整个循环中止
例2:
思考:为什么用sleep 5?
3.6 case 条件选择格式:
case 值 in 模式1) 命令1 …… ;; 模式2) 命令2 …… ;; esaccase 取值后面必须为in,每个模式必须以右括号结束,取值可以为变量或者常数,找到匹配模式后,执行相关命令直到;;
模式部分可以包含元字符,与命令行中文件扩展名中使用的匹配类型相符,如 * ? [..]
例:
有时需要某些准则退出循环或者跳过循环步,就需要break和continue来实现
break 允许跳出循环或者case语句,在嵌套循环里,可以制定跳出的循环个数,例在两层的嵌套循环内,break 2可以跳出整个循环
continue 类似于break,区别是continue只会跳过当前的循环步,而不会跳出整个循环
例子1:
例子2 :
names2.txt 内容包含雇员名字,部门,及其id,如下所示:
------------------------------内容如下--------------------------------
---LISTING OF PERSONNEL FILE----
--- TAKEN AS AT 06/1999----------------
Louise Conrad:Accounts:ACC8987
Peter James:Payroll:PR489
Fred Terms:Customer:CUS012
James Lenod:Accounts:ACC887
Frank Pavely:Payroll:PR489
-------------------------------------------------------------------------------
要求:读取names2.txt文件,将在职员工的名字,部门,部门id读取打印出来
说明:Peter James已经离职