Shell编程的条件表达式如何使用?

    /    2019-01-29

1. 文件判断

常用文件测试操作符

常用文件测试操作符说明
-d文件,d的全拼为directory文件存在且为目录则为真,即测试表达式成立
-f文件,f的全拼为file文件存在且为普通文件则为真,即测试表达式成立
-e文件,e的全拼为exist文件存在则为真,即测试表达式成立。注意区别于“-f”,-e不辨别是目录还是文件
-r文件,r的全拼为read文件存在且可读则为真,即测试表达式成立
-s文件,s的全拼为size文件存在且文件大小不为0则为真,即测试表达式成立
-w文件,w的全拼为write文件存在且可写则为真,即测试表达式成立
-x文件,x的全拼为executable文件存在且可执行则为真,即测试表达式成立
-L文件,L的全拼为link文件存在且为链接文件则为真,即测试表达式成立
fl -nt f2,nt 的全拼为 newer than文件fl比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算
fl -ot f2,ot 的全拼为 older than文件fl比文件f2旧则为真,即测试表达式成立。根据文件的修改时间来计算

判断文件是否存在

[root@oldboy scripts]# [ -f /etc/hosts ]
[root@oldboy scripts]# echo $?
0
[root@oldboy scripts]# [ -f /etc/hosts1 ]
[root@oldboy scripts]# echo $?
1

判断文件是否存在,返回方式

[root@oldboy scripts]# [ -f /etc/hosts ] && echo "文件存在" || echo "文件不存在" 
文件存在
[root@oldboy scripts]# [ -f /etc/hosts1 ] && echo "文件存在" || echo "文件不存在" 
文件不存在

判断目录是否存在

[root@oldboy scripts]# [ -d /tmp ] && echo "目录存在" || echo "目录不存在" 
目录存在
[root@oldboy scripts]# [ -d /tmp1 ] && echo "目录存在" || echo "目录不存在" 
目录不存在

使用变量的方法进行判断

dir=/etc1/;[ -d $dir ] && tar zcf etc.tar.gz $dir || echo "$dir目录不存在"

2. 字符串判断

字符串测试操作符

常用字符串测试操作符说明
-n "字符串"若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero
-Z "字符串"若字符串的长度为0,则为真,即测试表达式成立,z可以理解为zero的缩写
"串 1"== "串 2"若字符串1等于字符串2,则为真,即测试表达式成立,可使用"=="代替"="
"串 1" != "串 2"若字符串1不等于字符串2,则为真,即测试表达式成立,但不能用"!=="代替"!="
1.对于字符串的测试,一定要将字符串加双引号之后再进行比较。

2.空格非空

-z 判断字符串长度

[root@oldboy scripts]# x=  ; [ -z "$x" ] && echo "输入为空" || echo '输入有内容'
输入为空
[root@oldboy scripts]# x=12 ; [ -z "$x" ] && echo "输入为空" || echo '输入有内容'
输入有内容

-n 判断字符串长度

[root@oldboy scripts]# x=12 ; [ -n "$x" ] && echo "输入有内容" || echo '输入为空'
输入有内容
[root@oldboy scripts]# x= ; [ -n "$x" ] && echo "输入有内容" || echo '输入为空'
输入为空

"串 1" == " 串 2 " 使用定义变量的方式进行判断

cmd=$1
[ "$cmd" == "start" ] && echo start
# 测试
[root@oldboy scripts]# cmd=start;[ "$cmd" == "start" ] && echo start
start

3. 整数判断

整数二元比较操作符参考

在[]以及test中使用的比较符号在(())和[[]]中使用的比较符号说明
-eq==或=相等,全拼为equal
-ne!=不相等,全拼为not equal
-gt>大于,全拼为greater than
-ge>=大于等于,全拼为greater equal
-lt<< td="">小于,全拼为丨ess than
-le<=< td="">小于等于,全拼为less equal

判断两数是否相等

[root@oldboy scripts]# [ 1 -eq 1 ]
[root@oldboy scripts]# echo $?
0
[root@oldboy scripts]# [ 1 -eq 2 ]
[root@oldboy scripts]# echo $?
1

大于等于

[root@oldboy ~]# [ 11 -ge 1 ] && echo "成立" || echo "不成立"
成立

小于

[root@oldboy ~]# [ 11 -lt 1 ] && echo "成立" || echo "不成立"
不成立

大于

[root@oldboy ~]# [ 11 -gt 1 ] && echo "成立" || echo "不成立"
成立

不等于

[root@oldboy ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立

4. 逻辑符号

常用逻辑操作符

在[]和test中使用的操作符说明在[[]]和中使用的操作符说明
-a[ 条件A -a  条件B ]&&and,与,两端都为真,则结果为真
A与B都要成立,整个表达式才成立
-o[ 条件A -o  条件B]||or,或,两端有一个为真,则结果为真
A与B都不成立,整个表达式才不成立

!not,非,两端相反,则结果为真

逻辑操作符与整数判断配合

[root@oldboy ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立

取反

[root@oldboy ~]# [ ! 11 -ne 1 ] && echo "成立" || echo "不成立"
不成立

两边都为真

[root@oldboy ~]# [  11 -ne 1 -a 1 -eq 1 ] && echo "成立" || echo "不成立"
成立

至少有一边为真

[root@oldboy ~]# [  11 -ne 1 -o 1 -eq 1 ] && echo "成立" || echo "不成立"
成立

感叹号的特殊用法

[root@oldboy ~]#  !516
 ls
anaconda-ks.cfg  bootime.avg  setup.sh  vim

(6)

分享至