深入浅出Linux-Shell编程[二】

举报
Maynor学长 发表于 2022/09/20 19:39:47 2022/09/20
【摘要】 ​2、Shell 测试表达式用法1、文件测试表达式-d 文件文件存在且为目录则为真-f 文件文件存在且为普通文件则为真-e 文件文件存在则为真,  不辩别是目录还是文件-s 文件文件存在且文件大小不为0则为真-r 文件文件存在且可读则为真,  与执行脚本的用户权限也有关-w 文件文件存在且可写则为真,  与执行脚本的用户权限也有关-x 文件文件存在且可执行则为真,  与执行脚本的用户权限也有...


2Shell 测试表达式用法

1文件测试表达式








-d 文件

文件存在且为目录则为真

-f 文件

文件在且为普通文件则为真

-e 

文件存在则为真,  不辩别是目录还是文件

-s 

文件存在且文件大小不为0则为

-r 

文件存在且可读则为真,  与执行脚本的用户权限也有关

-w 文件

文件存在且可写则为真,  与执行脚本的用户权限也有关

-x 文件

文件存在且可执行则为真,  与执行脚本的用户权限也有关

-L 文件

文件在且为链接文件则为真

f1 -nt f2

文件f1比文件f2新则为真,  根据文件的修改时间计算

f1 -ot f2

文件f1比文件f2旧则为真,  根据文件的修改时间计算

  件测试 [ 操作符 文件或目录 ]

[root@qfedu.com	~]# test ‐d /home
[root@qfedu.com	~]# echo $?
0	
[root@qfedu.com	~]# test ‐d /home11111
[root@qfedu.com	~]# echo $?
1	
[root@qfedu.com	~]# [ ‐d /home ]
[root@qfedu.com	~]# [ ! ‐d /ccc ]  && mkdir /ccc
[root@qfedu.com	~]# [ ‐d /ccc ]  | | mkdir /ccc






2、字符串测试表达式

# 提示:  字符串必须使用双引号
[root@qfedu.com  ~]# [ "$USER" = "root" ];echo $?
0
[root@qfedu.com  ~]# [ "$USER" == "root" ];echo $?
0
[root@qfedu.com  ~]# BBB=""
[root@qfedu.com  ~]# echo ${#BBB}
0
[root@qfedu.com  ~]# [ ‐z "$BBB" ]
[root@qfedu.com  ~]# echo $?
0
[root@qfedu.com  ~]# [ ‐n "$BBB" ]
[root@qfedu.com  ~]# echo $?
1
[root@qfedu.com  ~]# var2=
[root@qfedu.com  ~]#
[root@qfedu.com  ~]# echo ${#var1}
3
[root@qfedu.com  ~]# echo ${#var2}
0
[root@qfedu.com  ~]# echo ${#var3}
0
[root@qfedu.com  ~]# [ ‐z "$var1" ];echo $?
1
[root@qfedu.com  ~]# [ ‐z "$var2" ];echo $?
0
[root@qfedu.com  ~]# [ ‐z "$var3" ];echo $?
0
[root@qfedu.com  ~]# [ ‐n "$var1" ];echo $?
0
[root@qfedu.com  ~]# [ ‐n "$var2" ];echo $?






参数

-z

1

如果字符串s1的长度为0,  则测试条件为真

-n

1

如果字符串s1的长度大于0 则测试条件为真

sl


如果字符串s1不是空字符串,  则测试条件为真

===

s1=s2

如果s1等于s2,  则测试条件为真,“=”前后应有空格

!=

s1!=s2

如果s1不等于s2,  则测试条件为真

<

1

如果按字典顺序s1s2之前,  则测试条件为真

>

s1>s2

如果按自定顺序s1s2之后,  则测试条件为真




1、注意

  对于字串的比较,  一定要将字符串加比引号后再比较。如[ -n "$string" ]

   =!=可用于判断两个字符串是否相

2、字符串比较

# 提示:  字符串必须使用双引号
[root@qfedu.com  ~]# [ "$USER" = "root" ];echo $?
0
[root@qfedu.com  ~]# [ "$USER" == "root" ];echo $?
0

[root@qfedu.com  ~]# BBB=""
[root@qfedu.com  ~]# echo ${#BBB}
0
[root@qfedu.com  ~]# [ ‐z "$BBB" ]
[root@qfedu.com  ~]# echo $?
0
[root@qfedu.com  ~]# [ ‐n "$BBB" ]
[root@qfedu.com  ~]# echo $?
1
[root@qfedu.com  ~]# var2=
[root@qfedu.com  ~]#
[root@qfedu.com  ~]# echo ${#var1}
3
[root@qfedu.com  ~]# echo ${#var2}
0
[root@qfedu.com  ~]# echo ${#var3}
0
[root@qfedu.com  ~]# [ ‐z "$var1" ];echo $?
1
[root@qfedu.com  ~]# [ ‐z "$var2" ];echo $?
0
[root@qfedu.com  ~]# [ ‐z "$var3" ];echo $?
0
[root@qfedu.com  ~]# [ ‐n "$var1" ];echo $?
0
[root@qfedu.com  ~]# [ ‐n "$var2" ];echo $?














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是超级用户



3C语言风格的数值比较





[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、实例

# 案例1:
[root@qfedu.com  ~]# cat test02.sh #!/bin/bash
# 判断用户输入的是否是数字
read ‐p "请输入一个数值: " num
if [[ ! "$num" =~ ^[0 ‐9]+$ ]];then    echo "你输入的不是数字,  程序退出!!!"
exit
fi

echo ccc
# 案例2:
[root@qfedu.com  ~]# cat test03.sh # !/bin/bash
while :
do
if [[ $num =~ ^[0 ‐9]+$ ]];then
break
else
read ‐p "不是数字,  请重新输入数值: " num fi
done
echo "你输入的数字是: $num"










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 =!=<>>=<=

=!=<

>>=<=

字符串比

操作符

===!=

===!=

===!=

===!=

否支持

通配符

支持

支持

支持







【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。