首页 >> 学习 >> Shell脚本编程基础 >> 判断
判断

本节重要性:★★★★★    本节难度:★★★★★

判断结构根据条件是否成立确定要执行的命令。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最为常用,并且其判断条件较为灵活,需要熟练掌握。

<<上一节  下一节>>