程序中的流程控制是由比较语句和测试语句处理的。
1、if条件
if conditon
then
commands;
fi
2、esle if和esle
if condition
then
commands;
else if condition; then
commands;
else
commands;
fi
由于if的条件判断部分可能会变得很长,可以使用逻辑运算符将它变得简洁一些:
[ condition ] && action;#如果condition为真,则执行action;
[ condition ] || action;#如果condition为假,则执行action。
算术比较
条件通常被放置在封闭的中括号内,注意一定要在[或]与操作数之间有一个空格。如
[$var -eq 0 ] or [ $var -eq 0]
对变量或值进行算术条件判断:
[ $var -eq 0 ]#当$var等于0时,返回真
[$var -ne 0]#当$var为非0时,返回真
其他操作符:
-gt:大于
-lt:小于
-ge:大于或等于
-le;小于或等于
可以按照下面的方法结合多个条件进行测试:
[ $var1 -ne 0 -a $var2 -gt 2 ] #使用逻辑与-a
[$var1 -ne 0 -o $var2 -gt 2] #逻辑或-o
文件系统相关测试
可以使用不同的条件标志测试不同的文件系统相关的属性
[ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真
[-x $var]:如果给定的变量包含的文件可执行,则返回真
[-d $var]:如果给定的变量包含的是目录,则返回真
[-e $var]:如果给定的变量包含的文件存在,则返回真
[-c $var]:如果给定的变量包含的是一个字符设备文件的路径,则返回真
[-b $var]:如果给定的变量包含的是一个块设备文件的路径,则返回真
[-w $var]:如果给定的变量包含的文件可写,则返回真
[-r $var]:如果给定的变量包含的文件可读,则返回真
[-L $var]:如果给定的变量包含的是一个符号链接,则返回真
使用方法:
fpath="/etc/passwd"
if [ -e $fpath ]; then
echo File exists;
else
echo Does not exits;
fi
字符串比较
使用字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误。
可以使用下面的方法检测两个字符串,看看他们是否相同
a、[[ $str1 = $str2]]:相等时,返回真。注意在等号前后各有一个空格
b、[[ $str1 == $str2]]:这是检测字符串是否相等的另一种写法
c、[[ $str1 != $str2]]:不同时,返回真。
还可以检查字符串的字母序情况,
[[ $str1 > $str2]]:如果前者的字母序大于后者,则返回真
[[ $str1 < $str2]]:如果前者的字母序小于后者,则返回真
[[ -z $str1 ]]:如果str1包含的是空字符串,则返回真。
[[ -n $str1 ]]:str1为非空字符串时,返回真。
使用逻辑&&和||将多个条件组合起来。
test命令可以用来执行条件检测。用test可以避免使用过多的括号。
如:
if [ $var -eq 0 ]; then echo "TRUE";fi
也可以写成:
if test $var -eq 0;then echo "True";fi