判断结构根据条件是否成立确定要执行的命令。Shell的条件测试比其他语言要丰富一些,测试的运算符也有几种。
1. 条件测试
根据条件测试的形式,Shell条件测试可分为:
根据条件测试的内容,Shell条件测试符可分为:
数值测试运算符:
n1 –eq n2 n1等于n2时为真 n1 –ne n2 n1不等于n2时为真 n1 –lt n2 n1小于n2时为真 n1 –le n2 n1小于或等于n2时为真 n1 –gt n2 n1大于n2时为真 n1 –ge n2 n1大于或等于n2时为真
字符串测试运算符:
-z s1 字符串s1长度为0时为真 -n s1 字符串s1长度大于0时为真 s1 字符串s1不为空时为真 s1 = s2 字符串s1和s2一样时为真 s1 == s2 同上 s1 != s2 字符串s1和s2不一样时为真 s1 < s2 按字典顺序s1在s2之前时为真 s1 > s2 按字典顺序s1在s2之后时为真
逻辑运算符:
! 逻辑非,如:[ ! -f hello.pl ] -a 逻辑与,如:[ -f hello.pl -a -f hello.c ] -o 逻辑或,如:[ -f hello.pl -o -f hello.sh ]
文件测试运算符:
-r filename 文件存在且用户可读则为真 -w filename 文件存在且用户可写则为真 -x filename 文件存在且用户可执行则为真 -f filename 文件存在且是普通文件则为真 -d filename 文件存在且是目录文件则为真 -p filename 文件存在且是管道文件则为真 -b filename 文件存在且是块设备文件则为真 -c filename 文件存在且是字符设备文件则为真 -s filename 文件存在且大小大于0则为真 -t n 文件被打开且其文件描述字是与终端设备相关的则为真
特殊条件测试:
: 不作任何事情,退出值为0 true 总为真,退出值为0 false 总为假,退出值为1
Shell的判断语句有三种:if、case和select。
2. if语句
if语句的一般格式为:
if 条件 then 命令 elif 条件 then 命令 else 命令 fi
如下面的例子:
if test -f /home/peter/shell/hello.sh then echo "File exists!" else echo "File does not exist" fi
if语句需要注意以下几点:
3. case语句
case语句的一般格式为:
case 变量值 in 模式字符串1) 命令;; 模式字符串2) 命令;; …… *) 命令;; esac
如:
case $week in Saturday|Sunday) echo "Weekend";; Monday|Tuesday|Wednesday|Thursday|Friday) echo "Work day";; *) echo "Unknow date";; esac
case一般用在需要判断的情形比较多的情况。
4. select语句
select语句的一般格式为:
select 变量名 [in word…] do 命令表 done
select语句适用于需要用户交互的情形,如:
echo "What is your favourite fruit?" select fruit in "Banana" "Apple" "Orange" "Date palm" "Other" do break; done echo "Your favourite fruit is $fruit"
几种判断语句中,if最为常用,并且其判断条件较为灵活,需要熟练掌握。