shell编程中的控制判断语句
if
- 单格式与嵌套
if 条件表达式;then #当条件为真时执行以下语句 命令列表 else #为假时执行以下语句 命令列表 fi if 语句也可以嵌套使用 if 条件表达式1;then if 条件表达式2;then 命令列表 else if 条件表达式3;then 命令列表 else 命令列表 fi fi else 命令列表 fi
- 多分支格式
if test -f "$1" ;then lpr $1 elif test -d "$1";then #elif 同else if (cd $1;lpr $1) else echo "$1不是文件或目录" fi
case
case $newval in 1) #这里是可能值1 echo 1 ;; #表示第一个分支结束 2) #这里是可能值 2 echo 2 ;; #第二个分支结束 *) #表示其他可能值,必须在最后,否则他后面的语句无法执行 echo unkown esac #case 语句结束
while /until
while 表达式 do 命令列表 done 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
下面将这个程序再改动一下
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 for n in {1..10} do echo $n done for letter in a b c d e; do echo $letter done
- 文件用法
for file in * do echo $file done for File in a1 a2 a3 a4 a5 do diff aa/$File bb/$File done
- 累加格式
for (( i=1;$i<10;i++ )) do echo $i done for(( i=1;$i<10;i=$[`expr $i + 1`] )) do echo $i done
其他循环控制语句
break 命令不执行当前循环体内break下面的语句从当前循环退出.
continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行.
判断文件的属性
格式:-操作符 filename -e 文件存在返回1, 否则返回0 -r 文件可读返回1,否则返回0 -w 文件可写返回1,否则返回0 -x 文件可执行返回1,否则返回0 -o 文件属于用户本人返回1, 否则返回0 -z 文件长度为0返回1, 否则返回0. -f 文件为普通文件返回1, 否则返回0 -d 文件为目录文件时返回1, 否则返回0
测试字符串
字符串1 = 字符串2 当两个字串相等时为真 字符串1 != 字符串2 当两个字串不等时为真 -n 字符串 当字符串的长度大于0时为真 -z 字符串 当字符串的长度为0时为真 字符串 当串字符串为非空时为真
测试两个整数关系
数字1 -eq 数字2 两数相等为真 数字1 -ne 数字2 两数不等为真 数字1 -gt 数字2 数字1大于数字2为真 数字1 -ge 数字2 数字1大于等于数字2为真 数字1 -lt 数字2 数字1小于数字2为真 数字1 -le 数字2 数字1小于等于数字2为真
逻辑测试
-a 与 -o 或 ! 非