shell测试语句

2.2k 词

测试语句

在编写shell脚本时,常遇到需要判断变量的值师傅相等,或者检查文件状态等,这时就需要测试语句进行测试才能决定下一步动作。shell脚本根据不同的数据类型设置了不同的条件语句的格式,使用test或者用中括号包围就可以执行条件测试语句,下面介绍常用的测试语句。


数值测试

二元测试语句
数值测试用于比较两个数值的大小,常用的测试语句如下:

  • -eq:等于(equal)
  • -ne:不等于(not equal)
  • -gt:大于(greater than)
  • -lt:小于(less than)
  • -ge:大于等于(greater than or equal to)
  • -le:小于等于(less than or equal to)

示例:

1
2
3
4
5
6
7
8
#!/bin/bash
num1=10
num2=20
if [ $num1 -eq $num2 ]; then
echo "$num1 等于 $num2"
else
echo "$num1 不等于 $num2"
fi

字符串测试

二元测试语句
字符串测试用于比较两个字符串是否相等,常用的测试语句如下:

  • =:等于
  • !=:不等于
  • -z:字符串长度为0
  • -n:字符串长度不为0

示例:

1
2
3
4
5
6
7
8
#!/bin/bash
str1="hello"
str2="world"
if [ $str1 = $str2 ]; then
echo "$str1 等于 $str2"
else
echo "$str1 不等于 $str2"
fi

文件测试

文件测试分为文件状态测试和文件比较测试,以下是状态测试的部分

文件状态测试

一元测试语句
文件测试用于检查文件的状态,常用的测试语句如下:

  • -e:文件存在(exist)
  • -s:文件是否非空
  • -S:文件是套接字文件(socket)
  • -L:文件是软链接文件(symbolic link)
  • -b:文件是块设备文件(block)
  • -c:文件是字符设备文件(character)
  • -d:文件是目录(dir)
  • -f:文件是普通文件(file)
  • -p:文件是管道文件(pipe)
  • -r:文件可读(readable)
  • -w:文件可写(writeable)
  • -x:文件可执行(executable)

示例:

1
2
3
4
5
6
7
#!/bin/bash
file="/etc/passwd"
if [ -e $file ]; then
echo "$file 存在"
else
echo "$file 不存在"
fi

文件比较测试

二元测试语句
文件比较测试用于比较文件的大小,修改时间等信息,常用的测试语句如下:

  • -nt:文件1比文件2新(newer than)
  • -ot:文件1比文件2旧(older than)
  • -ef:文件1和文件2是同一个文件(equals file)(判断两个文件是否是硬链接)

另外,还可以借用数值测试中的比较运算符进行文件大小比较,常用的测试语句如下:

  • -eq:文件1和文件2大小相等(equal)
  • -ne:文件1和文件2大小不相等(not equal)
  • -le:文件1小于等于文件2(less than or equal)
  • -ge:文件1大于等于文件2(greater than or equal)

示例:

1
2
3
4
5
6
7
8
#!/bin/bash
file1="/etc/passwd"
file2="/etc/shadow"
if [ $file1 -nt $file2 ]; then
echo "$file1$file2 新"
else
echo "$file1$file2 旧"
fi

复合测试

复合测试用于将多个测试条件组合在一起,常用的测试语句如下:

命令执行控制语句:

  • &&:逻辑与(and)
  • ||:逻辑或(or)

命令执行控制语句本质上是将多个命令的执行结果进行运算,并不能直接的将多个判断条件放在一条命令中

示例:

1
test -e /home && test -r /home
1
2
3
4
5
6
7
#!/bin/bash
file="/etc/passwd"
if [ -e $file ] && [ -r $file ]; then
echo "$file 存在并且可读"
else
echo "$file 不存在或者不可读"
fi

多重条件判定语句:

  • -a:逻辑与(and)
  • -o:逻辑或(or)
  • !:逻辑非(not)

和命令执行控制语句不同,多重条件判断语句就是将多个条件用-a或者-o连接起来,如果条件为真,则整个表达式为真,否则为假。

示例:

1
test -e /home -a -r /home

可以看到这条示例中相比于前面的命令执行控制语句,少了一个 test ,这是因为在多重条件判断语句中,-a-o 是默认的,所以可以省略,同时被视作一条命令。

1
2
3
4
5
6
7
#!/bin/bash
file="/etc/passwd"
if [ -e $file -a -r $file ]; then
echo "$file 存在并且可读"
else
echo "$file 不存在或者不可读"
fi

条件表达式

条件表达式用于在shell脚本中执行条件判断,常用的测试语句如下: