Linux 比较与测试

Bash能够执行各种测试。我们可以用ifif else以及逻辑运算符来测试,用比较运算符来比较数据项。除此之外,还有一个test命令也可以用于测试。

  • if

    if condition;		# 有分号
    then
    	commands;
    fi
    
  • else ifelse

    if condition;
    then
    	commands;
    else if condition; then
    	commands;
    else
    	commands;
    fi
    
  • if 和 else 语句能够嵌套使用。 if的条件判断部分可能会变得很长,但可以用逻辑运算符将它变得简洁一些:
    [ condition ] && action; # 如果condition为真,则执行action
    [ condition ] || action; # 如果condition为假,则执行action

    &&是逻辑与运算符, ||是逻辑或运算符。

  • 算术比较
    比较条件通常被放置在封闭的中括号内。一定要注意在 [ ] 或两者与操作数之间有一个空格。如果忘记了这个空格,脚本就会报错。

    [ $var -eq 0 ] 		#当$var等于0时,返回真
    [ $var -ne 0 ] 		#当$var不为0时,返回真
    

    其他重要的操作符如下:
    -gt:大于。
    -lt:小于。
    -ge:大于或等于。
    -le:小于或等于。

    -a逻辑与操作符, -o逻辑或操作符。可以按照下面的方法结合多个条件进行测试:

    [ $var1 -ne 0 -a $var2 -gt 2 ] 		#使用逻辑与-a
    [ $var1 -ne 0 -o $var2 -gt 2 ] 		#逻辑或-o
    

    注意:-a 和 -o 是用于同一个中括号之内的多个条件判断之间的逻辑操作符;&& 和 || 是用于多个中括号之间的条件判断的逻辑操作符。

  • 文件系统相关测试
    [ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。
    [ -x $var ]:如果给定的变量包含的文件可执行,则返回真。
    [ -d $var ]:如果给定的变量包含的是目录,则返回真。
    [ -e $var ]:如果给定的变量包含的文件存在,则返回真。
    [ -c $var ]:如果给定的变量包含的是一个字符设备文件的路径,则返回真。
    [ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真。
    [ -w $var ]:如果给定的变量包含的文件可写,则返回真。
    [ -r $var ]:如果给定的变量包含的文件可读,则返回真。
    [ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真。

  • 字符串比较
    进行字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误。

    • 测试两个字符串是否相同
      [[ $str1 = $str2 ]]:当str1等于str2时,返回真。也就是说, str1和str2包含的文本是一模一样的。
      [[ $str1 == $str2 ]]:这是检查字符串是否相同的另一种写法。

    • 测试两个字符串是否不同
      [[ $str1 != $str2 ]]:如果str1和str2不相同,则返回真。

    • 字符串大小比较
      字符串是依据字符的ASCII值进行比较的。
      [[ $str1 > $str2 ]]:如果str1的字母序比str2大,则返回真。
      [[ $str1 < $str2 ]]:如果str1的字母序比str2小,则返回真。

    注意:在=前后各有一个空格。如果忘记加空格,那就不是比较关系了,而是变成了赋值语句。

    • 测试空串
      [[ -z $str1 ]]:如果str1为空串,则返回真。
      [[ -n $str1 ]]:如果str1不为空串,则返回真。

使用逻辑运算符 &&|| 能够很容易地将多个条件组合起来:

if [[ -n $str1 ]] && [[ -z $str2 ]] ;
then
	commands;
fi

test 命令可以用来测试条件。用test可以避免使用过多的括号,增强代码的可读性。之前讲过的[]中的测试条件同样可以用于test命令。例如,

if [ $var -eq 0 ]; then echo "True"; fi

# 也可以写成:

if test $var -eq 0 ; then echo "True"; fi

猜你喜欢

转载自blog.csdn.net/fcku_88/article/details/88619588