首页 > 代码库 > 1.7比较与测试

1.7比较与测试

程序中的流程控制是由比较语句和测试语句处理的。

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

 

1.7比较与测试