Shell编程各种测试(二)


test用法

数字比较

-eq:equal,是否相等。

-ne:not equal,是否不相等。

-gt:greater than,是否大于。

-ge:greater equal,是否大于等于。

-lt:less than,是否小于。

-le:less equal,是否小于等于。

字符串比较

==:是否等于。字符串等值比较,使用一个=符号也是可以。

!=:是否不等于。

-z:判断字符串是否为空。

n:判断字符串是否不空。

文件测试

-a FILE或者-e FILE:判断文件是否存在。

-d FILE:文件是否存在且为目录文件。

-f FILE:文件是否存在且为普通文件(即文本文件)。

组合测试条件

即与或非。

[ EXP1 -a EXP2 ]:EXP1和EXP2必须都为true,结果才为true。

[ EXP1 -o EXP2 ]:只要EXP1和EXP2当中有一个为true,结果就为true。

[ ! EXP ]:当EXP为true的时候,结果为false;当EXP为false的时候,结果为true。

案例

[root@docker135 ~]# a=2
[root@docker135 ~]# b=3
[root@docker135 ~]# c=5
[root@docker135 ~]# [ $b -gt $a -a $b -lt $c ] && echo "条件成立" || echo "条件不成立"
条件成立
[root@docker135 ~]# 

[root@docker135 ~]# [ $b -lt $a -o $b -lt $c ] && echo "条件成立" || echo "条件不成立"    
条件成立
[root@docker135 ~]# 

脚本参数

$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

脚本测试

# bash -n test.sh
# bash -x test.sh

-x:追踪脚本的执行过程。

-n:类似于语法检测。(挺弱的 不太准确)