【Linux Shell脚本编程】条件测试判断与中括号

TangLu 未命名 2018-12-19 6927 0

条件判断在Shell脚本中非常重要,使用条件判断实现一系列的逻辑功能,比如“如果当目录不存在则自动创建”这样的需求,在Shell中可以通过多种不同的书写方式进行条件判断:

#方法1,使用test表达式进行条件判断
test $a -eq $b
#方法2,使用中括号进行条件判断,括号两边必须留有空格,引用变量必须添加双引号
[ $a -eq $b ] # [ 表达式 ]

#方法3,[[]]双中括号,是[]的扩展写法,支持正则与逻辑判断符号,比如&&、||、<、>等符号在[[]]中能正常判断,而在[]中会报错
if [[ $a != 1 && $a != 2 ]]  #如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]


一、对整数类型的数据进行条件判断,用于比较数字
-eq:测试两个整数是否相等,如$a -eq $b,判断a和b两个变量的值是否相等,是的话$?返回值为0
-ne:测试两个整数是否不等,不等为真(即$?返回0)
-gt:测试一个数是否大于另一个数,大于为真,否则为假
-lt:测试一个数是否小于另一个数,小于为真,否则为假
-gt:测试一个数是否大于或等于另一个数

-le:测试一个数是否小于或等于另一个数


二、对文件类型的数据进行条件判断,用于测试文件属性或者文件类型
-e:测试文件是否存在,如-e /etc/fstab
-f:测试是否为普通文件
-d:测试是否为目录文件
-w:测试当前用户是否对文件有写权限
-r:测试当前用户是否对文件有读权限

-x:测试当前用户是否对文件有执行权限


三、对字符串类型的数据进行条件判断,用于测试字符内容是否为正确的值变量或字符串都要用双引号避免比如变量不存在的情况下报出的语法错误

=:测试两边字符串是否相等,不可用于数字大小的比较,如果涉及到正则表达式那应该写为=~

-n:判断变量是否非空,如果非空返回真,否则为假

-z:判断变量是否为空,如果为空返回真,否则为假

!:对判断结果取反,如!=、! -d、! -f

if [ ! -d $DIR ];then
  echo "$DIR not exists"
else
  echo "$DIR already exists"
fi


四、组合逻辑测试
-a:逻辑与关系
-o:逻辑或关系
!: 非关系

if [ $# -gt 1 -a $# -le 5 ]
if [ $# -gt 1 ] && [ $# -le 5 ]



评论