shell比较与测试的方法详解(图文)

发布时间:2020-03-14编辑:脚本学堂
本文介绍下,有关shell编程中,用于比较与测试的一些方法,包括数字的比较、字符串的比较、文件属性的测试等。有需要的朋友参考下。

shell/ target=_blank class=infotextkey>shell脚本中,可以用if、if else及逻辑运算符进行测试。

用一些比较运算符来比较数据项,还有一个test命令,也可以用来进行测试。

先说下if语句的判断方式,一般如下:
 

if condition;
then
commands;
fi
esle if 和else:

if conditions;
then
commands;
elif condition;
then
  commands;
else
  commands;
fi

if与else语句可以嵌套。if的条件判断部分可能会很长,如遇到这样的情况时,可考虑用逻辑运算符使其简洁一些:
[ condition ] && action #如果condition为真,则执行action
[ condition ] || action #如果condition为假,则执行action
&&是逻辑与运算符,||是逻辑或运算符。写Bash脚本时,这是一个很好用的技巧。

下面分别来介绍shell中的算术比较方法、文件系统相关测试、字符串比较方法。

一、算术比较
在shell中,进行算术比较的话,条件通常被放置在封闭的中括号中。注意在[或]与操作数之间有一个空格。如果忘记此空格,脚本会报错。
例如:
[ $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

二、文件系统的相关测试
可以使用不同的条件标志测试不同的文件系统相关属性。
 

-r file  用户可读为真
-w file  用户可写为真
-x file  用户可执行为真
-f file  文件为正规文件为真
-d file  文件为目录为真
-c file  文件为字符特殊文件为真
-b file  文件为块特殊文件为真
-s file  文件大小非0时为真
-t file  当文件描述符(默认为1)指定的设备为终端时为真

例1:
 

shell比较与测试

三、字符串比较
说到shell中的字符串比较,这里要特别注意下:
对字符串进行比较时,最好用双中括号,因为有时采用单个中括号会产生错误,所以请避开使用它们。

字符串判断:
 

str1 = str2  当两个串有相同内容、长度时为真
str1 != str2  当串str1和str2不等时为真
-n str1     当串的长度大于0时为真(串非空)
-z str1     当串的长度为0时为真(空串)
str1      当串str1为非空时为真

注意:等号=的前后,要有一个空格。不加空格,就不是比较,而变成赋值操作了。

四、技巧
使用逻辑运算符&&与||可以很容易将多个条件组合起来
 

复制代码 代码示例:
if [[ -n $var1 ]] && [[ -z $var2 ]];
then
  commands;
fi

例2:
 

shell逻辑运算

另外,test命令也可以用来执行条件检测。
用test的好处在于可以避免使用过多的括号。
这里介绍过的[]中的测试条件,同样可以用于test命令。

例3:
 

shell test比较运算

至此,有关shell编程中,比较与测试的一些方法就介绍完了,建议大家注意其中标红的几个知识点,好好琢磨掌握下。