深入浅出Linux-Shell编程[二】
2、Shell 测试表达式用法
1、文件测试表达式
| -d 文件 |
文件存在且为目录则为真 |
| -f 文件 |
文件存在且为普通文件则为真 |
| -e 文件 |
文件存在则为真, 不辩别是目录还是文件 |
| -s 文件 |
文件存在且文件大小不为0则为真 |
| -r 文件 |
文件存在且可读则为真, 与执行脚本的用户权限也有关 |
| -w 文件 |
文件存在且可写则为真, 与执行脚本的用户权限也有关 |
| -x 文件 |
文件存在且可执行则为真, 与执行脚本的用户权限也有关 |
| -L 文件 |
文件存在且为链接文件则为真 |
| f1 -nt f2 |
文件f1比文件f2新则为真, 根据文件的修改时间计算 |
| f1 -ot f2 |
文件f1比文件f2旧则为真, 根据文件的修改时间计算 |
文件测试 [ 操作符 文件或目录 ]
2、字符串测试表达式
| |
参数 |
功能 |
| -z |
1 |
如果字符串s1的长度为0, 则测试条件为真 |
| -n |
1 |
如果字符串s1的长度大于0, 则测试条件为真 |
| sl |
|
如果字符串s1不是空字符串, 则测试条件为真 |
| =或== |
s1=s2 |
如果s1等于s2, 则测试条件为真,“=”前后应有空格 |
| != |
s1!=s2 |
如果s1不等于s2, 则测试条件为真 |
| < |
1 |
如果按字典顺序s1在s2之前, 则测试条件为真 |
| > |
s1>s2 |
如果按自定顺序s1在s2之后, 则测试条件为真 |
1、注意
对于字符串的比较, 一定要将字符串加比引号后再比较。如[ -n "$string" ]
=与!=可用于判断两个字符串是否相同
2、字符串比较
3、整数操作符
| 在[]和test中使用 |
在[[ ]]和(( ))中使用 |
说明 |
| -eq |
==或= |
等于, 全拼为equal |
| -nq |
!= |
不等于, 全拼为not equal |
| -gt |
> |
大于, 全拼为greater than |
| -ge |
>= |
大于等于, 全拼为greater equal |
| -lt |
< |
小于, 全拼为less than |
| -le |
<= |
小于等于, 全拼为less equal |
1、判断变量是不是数字
| [root@qfedu.com ~]# num10=123 [root@qfedu.com ~]# num20=ssss1114ss [root@qfedu.com ~]# [[ "$num10" =~ ^[0 ‐9]+$ ]];echo $? 0 [root@qfedu.com ~]# [[ "$num20" =~ ^[0 ‐9]+$ ]];echo $? 1 |
| [root@qfedu.com ~]# disk_use=$(df ‐P |grep '/$ ' |awk '{print $5} ' |awk ‐F% '{print $1} ') [root@qfedu.com ~]# [ $disk_use ‐gt 90 ] && echo "war......" [root@qfedu.com ~]# [ $disk_use ‐gt 60 ] && echo "war......" war...... [root@qfedu.com ~]# id ‐u 0 [root@qfedu.com ~]# [ $(id ‐u) ‐eq 0 ] && echo "当前是超级用户" 当前是超级用户 [alice@qfedu.com ~]$ [ $UID ‐eq 0 ] && echo "当前是超级用户" | | echo "you不是超级用户" you不是超级用户 |
3、C语言风格的数值比较
| [root@qfedu.com ~]# ((1<2));echo $? 0 [root@qfedu.com ~]# ((1==2));echo $? 1 [root@qfedu.com ~]# ((1>2));echo $? 1 [root@qfedu.com ~]# ((1>=2));echo $? 1 [root@qfedu.com ~]# ((1<=2));echo $? 0 [root@qfedu.com ~]# ((1!=2));echo $? 0 [root@qfedu.com ~]# ((`id ‐u`>0));echo $? 1 [root@qfedu.com ~]# (($UID==0));echo $? 0 |
4、实例
4、逻辑操作符
| 在[]和test中使用 |
在[[ ]]和(( ))中使用 |
说明 |
| -a |
&& |
and, 与, 两端都为真, 则结果为真 |
| -o |
| | |
or, 或, 两端有一个为真, 则结果为真 |
| ! |
! |
not, 非, 两端相反, 则结果为真 |
| [root@qfedu.com ~]# [ 1 ‐lt 2 ‐a 5 ‐gt 10 ];echo $? 1 [root@qfedu.com ~]# [ 1 ‐lt 2 ‐o 5 ‐gt 10 ];echo $? 0 [root@qfedu.com ~]# [[ 1 ‐lt 2 && 5 ‐gt 10 ]];echo $? 1 [root@qfedu.com ~]# [[ 1 ‐lt 2 | | 5 ‐gt 10 ]];echo $? 0 |
5、测试表达式的区别总结
| 测试表达 式符号 |
test |
[ ] |
[[ ]] |
(( )) |
| 边界是否 需要空格 |
需要 |
需要 |
需要 |
不需要 |
| 逻辑操作 符 |
!、-a、 -o |
!、-a、 -o |
!、&&、 | | |
!、&&、 | | |
| 整数比较 操作符 |
-eq、-ne、-lt、- gt、-ge、-le |
-eq、-ne、-lt、- gt、-ge、-le |
-eq、-ne、-lt、-gt、-ge、-le或 =、!=、<、>、>=、<= |
=、!=、<、 >、>=、<= |
| 字符串比 较操作符 |
=、==、!= |
=、==、!= |
=、==、!= |
=、==、!= |
| 是否支持 通配符 |
不支持 |
不支持 |
支持 |
不支持 |
- 点赞
- 收藏
- 关注作者
评论(0)