test命令的使⽤以及判断语法test命令
Shell中的 test 命令⽤于检查某个条件是否成⽴,它可以进⾏数值、字符和⽂件三个⽅⾯的测试。
语法:test EXPRESSION 或者 [ EXPRESSION ]
  字符串判断(⽤于看⽤户有没有输⼊指定的变量指定⽤户输⼊⽬录如没填)
  -n 字符段长度是否⾮零的如果结果为真值返回值为0 如果结果为假值返回值⾮0
数值测试
参数说明
-eq等于则为真
-ne不等于则为真
-gt⼤于则为真
-ge⼤于等于则为真
-
lt⼩于则为真
-le⼩于等于则为真
实例演⽰:
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo'两个数相等!'
else
echo'两个数不相等!'
fi
输出结果:
两个数相等!
代码中的 [ ] 执⾏基本的算数运算,如:
#!/bin/bash
a=5
b=6
result=$[a+b] # 注意等号两边不能有空格
echo"result 为: $result"
结果为:
result 为: 11
字符串测试
参数说明
=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真
实例演⽰:
num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
echo'两个字符串相等!'
else
echo'两个字符串不相等!'
fi
输出结果:
两个字符串不相等!
⽂件测试字符串长度怎么判断
参数说明
-e ⽂件名如果⽂件存在则为真
-r ⽂件名如果⽂件存在且可读则为真
-w ⽂件名如果⽂件存在且可写则为真
-x ⽂件名如果⽂件存在且可执⾏则为真
-
s ⽂件名如果⽂件存在且⾄少有⼀个字符则为真
-d ⽂件名如果⽂件存在且为⽬录则为真
-f ⽂件名如果⽂件存在且为普通⽂件则为真
-c ⽂件名如果⽂件存在且为字符型特殊⽂件则为真
-b ⽂件名如果⽂件存在且为块特殊⽂件则为真
实例演⽰:
cd /bin
if test -e ./bash
then
echo'⽂件已存在!'
else
echo'⽂件不存在!'
fi
输出结果:
⽂件已存在!
另外,Shell还提供了与( -a )、或( -o )、⾮( ! )三个逻辑操作符⽤于将测试条件连接起来,其优先级为:"!"最⾼,"-a"次之,"-o"最低。例如:cd /bin
if test -e ./notFile -o -e ./bash
then
echo'⾄少有⼀个⽂件存在!'
else
echo'两个⽂件都不存在'
fi
条件判断语句
1、基本语法:
if [ command ]; then
符合该条件执⾏的语句
fi
2、扩展语法:
if [ command ];then
符合该条件执⾏的语句
elif [ command ];then
符合该条件执⾏的语句
else
符合该条件执⾏的语句
fi
3、语法说明:
bash shell会按顺序执⾏if语句,如果command执⾏后且它的返回状态是0,则会执⾏符合该条件执⾏的语句,否则后⾯的命令不执⾏,跳到下⼀条命令。
当有多个嵌套时,只有第⼀个返回0退出状态的命令会导致符合该条件执⾏的语句部分被执⾏,如果所有的语句的执⾏状态都不为0,则执⾏
else中语句。
返回状态:最后⼀个命令的退出状态,或者当没有条件是真的话为0。
常⽤参数:
⽂件/⽬录判断:
常⽤的:
[ -a FILE ] 如果 FILE 存在则为真。
[ -d FILE ] 如果 FILE 存在且是⼀个⽬录则返回为真。
[ -e FILE ] 如果指定的⽂件或⽬录存在时返回为真。
[ -f FILE ] 如果 FILE 存在且是⼀个普通⽂件则返回为真。
[ -r FILE ] 如果 FILE 存在且是可读的则返回为真。
[ -w FILE ] 如果 FILE 存在且是可写的则返回为真。(⼀个⽬录为了它的内容被访问必然是可执⾏的)
[ -x FILE ] 如果 FILE 存在且是可执⾏的则返回为真。
不常⽤的:
[ -b FILE ] 如果 FILE 存在且是⼀个块⽂件则返回为真。
[ -c FILE ] 如果 FILE 存在且是⼀个字符⽂件则返回为真。
[ -g FILE ] 如果 FILE 存在且设置了SGID则返回为真。
[ -h FILE ] 如果 FILE 存在且是⼀个符号符号链接⽂件则返回为真。(该选项在⼀些⽼系统上⽆效)
[ -k FILE ] 如果 FILE 存在且已经设置了冒险位则返回为真。
[ -p FILE ] 如果 FILE 存并且是命令管道时返回为真。
[ -s FILE ] 如果 FILE 存在且⼤⼩⾮0时为真则返回为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID位时返回为真。
[ -O FILE ] 如果 FILE 存在且属有效⽤户ID则返回为真。
[ -G FILE ] 如果 FILE 存在且默认组为当前组则返回为真。(只检查系统默认组)
[ -L FILE ] 如果 FILE 存在且是⼀个符号连接则返回为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则返回为真。
[ -S FILE ] 如果 FILE 存在且是⼀个套接字则返回为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 ⽐ FILE2 新, 或者 FILE1 存在但是 FILE2 不存在则返回为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 ⽐ FILE2 ⽼, 或者 FILE2 存在但是 FILE1 不存在则返回为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则返回为真。
字符串判断
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
[ -n STRING ] 如果STRING的长度⾮零则返回为真,即⾮空是真
[ STRING1 ] 如果字符串不为空则返回为真,与-n类似
[ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
[ STRING1 != STRING2 ] 如果字符串不相同则返回为真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前⾯则返回为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后⾯则返回为真。
数值判断
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1⼤于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1⼤于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1⼩于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1⼩于等于INT2返回为真,<=
逻辑判断
[ ! EXPR ] 逻辑⾮,如果 EXPR 是false则返回为真。
[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
[ ] || [ ] ⽤OR来合并两个条件
[ ] && [ ] ⽤AND来合并两个条件
F⾼级特性:
双圆括号(( )):表⽰数学表达式
在判断命令中只允许在⽐较中进⾏简单的算术操作,⽽双圆括号提供更多的数学符号,⽽且在双圆括号⾥⾯的'>','<'号不需要转意。
双⽅括号[[ ]]:表⽰⾼级字符串处理函数
双⽅括号中判断命令使⽤标准的字符串⽐较,还可以使⽤匹配模式,从⽽定义与字符串相匹配的正则表达式。
双括号的作⽤:
在shell中,[ $a != 1 || $b = 2 ]是不允许出,要⽤[ $a != 1 ] || [ $b = 2 ],⽽双括号就可以解决这个问题的,[[ $a != 1 || $b = 2 ]]。⼜⽐如这个[ "$a" -lt "$b" ],也可以改成双括号的形式(("$a"
< "$b"))
if语句使⽤⽅法
最精简的if命令的语法是:
if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。