当我们完成某一命令的编写时,除了观察输出的内容,我们又如何得知命令是否执行成功呢?
这里,我们需要用到条件测试
条件测试是在Shell脚本中非常重要的一部分,它们用于测试脚本中的变量或表达式是否成立。
分类:
test:条件测试的标准命令。例如,使用test命令测试一个变量的值是否等于某个值。
[ ]:方括号(中括号)是test的另一种形式,它们被称为test的别名。例如,[ $var -eq 10 ] 表示测试变量 $var 是否等于10。
[[ ]]:双方括号是Bash Shell的重要特性,比test和[ ]更强大,可以使用通配符等进行模式匹配,&& || > < 等操作符可以直接应用于双中括号中,但不能用于[ ]
(( )):该操作符用于算术运算测试。可使用数学符号> < = 不需要使用参数 例如,使用(( num > 10 )) 测试变量 $num 是否大于10。
语法格式:
结果测试:
案例 1
- #执行成功
- [root@server ~]# test -f /etc/passwd
- [root@server ~]# echo $?
- 0
- #执行失败
- [root@server ~]# test -f /etc/aa
- [root@server ~]# echo $?
- 1
- [root@server ~]# test -f /etc/passwd && echo 1 || echo 0
- 1
- [root@server ~]# [-f /etc/passwd] # 注意:[] 中要有空格
- bash: [-f: command not found...
格式:如上
参数:
案列 1:
- [root@server ~]# [ -d /root ] && echo y || echo n
- y
案例 2:编写脚本测试文件是否存在
- [root@server ~]# vim temp1.sh
- #!/bin/bash
- FILE=$1 #$1代表位置变量,此处以及下面一行改为read -p "请输入文件名: " FILE
- echo FILE
- if test -e $FILE
- then
- echo "$FILE文件已存在"
- else
- echo "$FILE文件不存在,开始新建..."
- touch $FILE
- ls -l $FILE
- fi
- [root@server ~]# bash temp1.sh /etc/passwd #位置变量$1代表/etc/passwd
- /etc/passwd
- /etc/passwd文件已存在
作用:

案例:
- [root@server ~]# [ 5 -gt 3 ] && echo y || echo n
- y
- n
拓展知识:
- # 检查左侧内容是否包含右侧的表达式,可以使用 =~ 正则
- 匹配,表示是否包含
- [root@server ~]# n=123
- [root@server ~]# [[ "$n" =~ ^[0-9]+$ ]] && echo y || echo n
- y
- [root@server ~]# n=123ttt
- [root@server ~]# [[ "$n" =~ ^[0-9]+$ ]] && echo y || echo n
- n