本篇主要是对条件测试、if命令、(( ))、[[ ]]进行说明,如有不当之处,敬请留言指正。
一、条件测试命令:
格式1:test 条件表达式
格式2:[ 条件表达式 ]
测试的条件类型:
- 测试文件状态
- 整数值比较
- 字符串比较
- 逻辑测试
1.文件测试
格式:[ 操作符 文件或目录 ]
常用的测试操作符:
- -d:测试是否为目录(directory)
- -e:测试目录或文件是否存在(exist)
- -f:测试是否为文件(file)
- -s:测试文件存在且内容非空(仅有1个空格也是非空)
- -r:测试当前用户是否有权限读取(read)
- -w:测试当前用户是否有权限写入(write)
- -x:测试当前用户是否有权限执行(execute)
后面接#echo $? –》返回值为0,则上一条执行正确,为1,则执行错误。
经典用法:
[ -d /backup ]&&echo "/backup directory is exist"||mkdir /backup
这段代码的含义是:判断根下的backup目录是否存在,如果存在就输出”/backup directory is
exist”,如果不存在就创建/backup目录。
执行结果:
2.整数值比较
(1)传统格式:[ 整数1 操作符 整数2 ]
常用的测试操作符:
- -eq:等于(equal)
- -ne:不等于(not equal)
- -gt:大于(greater than)
- -lt:小于(lesser than)
- -le:小于或等于(lesser or equal)
- -ge:大于或等于(greater or equal)
(2)双圆括号比较: 格式:(( 整数1 操作符 整数2 ))
推荐使用双圆括号法比较整数值
# a=10
# ((a>20)) && echo ok || echo no
no
#((a>b))
#[ $b -gt $a ];echo $? --》不能使用> < >= ==
练习1:
# who | wc -l
7
# [ $(who | wc -l) -gt 5 ] && echo "Too many."
--》用户数是否>5
Too many.
# [ $(who | wc -l) -ge 10 ] && echo "> = 10."
--》用户数是否>=10
练习2:
监控内存的使用情况,一旦内存的可用空间低于800M就在屏幕上输出“your system is less than 800M,you need to do something to improve memory size”(用free -m 命令即可)。
答案:
# a=$(free -m|grep "Mem"|tr -s ' '|awk '{print $4}')
# [ $a -lt 800 ]&&echo "your system is less than 800M"
3.字符串比较
(1)
格式1:
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2:
[ -z 字符串 ]
- -z:字符串内容为空
- -n:字符串内容非空
判断字符串时,建议都加“”
例子:
(2)双方括号进行字符串比较–》推荐
格式:[[ 字符串1=字符串2 ]]
(方括号时,要用-gt等等符号 )
[[ ]] 可以解决变量中带空格的问题!!
# [ $a = "abc 123" ] && echo ok || echo no
-bash: [: too many arguments
no
# [[ $a =