test 命令操作主要配合比较运算符进行,可大体分为文件判断 / 数组比较 / 字符串判断 / 逻辑运算等
语法格式为 test expression, 当 test 判断 expression 为成立时,返回状态为 0,否则为非 0 值。
test 命令还可以简写为 [ ], 需要在两边中括号与 expression 是有一个空格,这个空格是必须的,否则会导致语法错误。[] 的写法更加简洁,比 test 使用频率更高。
1、数值比较
# 使用test expression方式if test 10 -eq 1;thenecho '10不等于1'elseecho '10等于1'fi# 使用[ ]简写方式(推荐)if [ 10 -eq 1 ];thenecho '10不等于1'elseecho '10等于1'fi
2、文件判断
FILE=$1# 使用[ ]简写方式if [ -e ${FILE} ]thenecho "文件或目录存在"if [ -d ${FILE} ]thenecho "${FILE}是目录"elseecho "${FILE}是文件"fielseecho "文件或目录不存在"fi# 使用test expression方式if test -e ${FILE}thenecho "文件或目录存在"if test -d ${FILE}thenecho "${FILE}是目录"elseecho "${FILE}是文件"fielseecho "文件或目录不存在"fi
3、字符串比较
STR1="linux"STR2="shell"if [ STR1 = STR2 ];thenecho "${STR1} = ${STR2}"elseecho "${STR1} != ${STR2}"fi
4、逻辑运算
如果需要在一个 test 中执行多个判断,需要使用 [[]], test 是 Shell 内置关键字,不是命令,免除函数传递过程,因此更加建议使用 [[]]。双中括号有以下注意事项:
- 不需要把变量名用双引号
""包围起来,即使变量是空值,也不会出错; - 不需要、也不能对 >、< 进行转义,转义后会出错;
- 其支持正则表达式,组合逻辑可以不使用 test 的 - a,-o 而使用 && ||。
与逻辑运算符号对应的 && 可以使用 -a,|| 可以使用 -o 来替换。
NUM1=1NUM2=2if [[ ${NUM1} -lt 5 && ${NUM2} -gt 5 ]];thenecho "true"elseecho "false"fi
