Shell脚本中条件判断语句的语法结构和用法
admin
2023-02-22 02:40:04
0

这篇文章为大家带来有关Shell脚本中条件判断语句的语法结构和用法详细介绍。大部分命令和知识点都是大家经常用到的,为此分享给大家做个参考。一起跟随小编过来看看吧。

一、条件判断语法结构

思考:何为真(true)?何为假(false)?

##1. 条件判断语法格式

  • 格式1: test 条件表达式
  • 格式2: [ 条件表达式 ]
  • 格式3: [[ 条件表达式 ]]  支持正则 

特别说明:

1)[  亲亲,我两边都有空格,不空打死你呦  ] :imp:

2)[[  亲亲,我两边都有空格,不空打死你呦  ]]:imp:

3)  更多判断,`man test`去查看,很多的参数都用来进行条件判断

2. 条件判断相关参数

1)判断文件类型

判断参数含义
-e判断文件是否存在(任何类型文件)
-f判断文件是否存在并且是一个普通文件
-d判断文件是否存在并且是一个目录
-L判断文件是否存在并且是一个软连接文件
-b判断文件是否存在并且是一个块设备文件
-S判断文件是否存在并且是一个套接字文件
-c判断文件是否存在并且是一个字符设备文件
-p判断文件是否存在并且是一个命名管道文件
-s判断文件是否存在并且是一个非空文件(有内容)

举例说明:

test -e file                    只要文件存在条件为真
[ -d /shell01/dir1 ]            判断目录是否存在,存在条件为真
[ ! -d /shell01/dir1 ]      判断目录是否存在,不存在条件为真
[[ -f /shell01/1.sh ]]      判断文件是否存在,并且是一个普通的文件

2)判断文件权限

判断参数含义
-r当前用户对其是否可读
-w当前用户对其是否可写
-x当前用户对其是否可执行
-u是否有suid,高级权限冒险位
-g是否sgid,高级权限强制位
-k是否有t位,高级权限粘滞位

3)判断文件新旧

说明:这里的新旧指的是文件的修改时间。

判断参数含义
file1 -nt  file2比较file1是否比file2新
file1 -ot  file2比较file1是否比file2旧
file1 -ef  file2比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

4)判断整数

判断参数含义
-eq相等
-ne不等
-gt大于
-lt小于
-ge大于等于
-le小于等于

5)判断字符串

判断参数含义
-z判断是否为空字符串,字符串长度为0则成立
-n判断是否为非空字符串,字符串长度不为0则成立
string1 = string2判断字符串是否相等
string1 != string2判断字符串是否相不等

6)多重条件判断

判断符号含义举例
-a 和 &&逻辑与[ 1 -eq 1 -a 1 -ne 0 ]     [ 1 -eq 1 ] && [ 1 -ne 0 ]
-o 和 ||逻辑或[ 1 -eq 1 -o 1 -ne 1 ]

特别说明:

&&  前面的表达式为真,才会执行后面的代码

||   前面的表达式为假,才会执行后面的代码

;        只用于分割命令或表达式

① 举例说明
  • 数值比较
[root@server ~]# [ $(id -u) -eq 0 ] && echo "the user is admin"
[root@server ~]$ [ $(id -u) -ne 0 ] && echo "the user is not admin"
[root@server ~]$ [ $(id -u) -eq 0 ] && echo "the user is admin" || echo "the user is not admin"

[root@server ~]# uid=`id -u`
[root@server ~]# test $uid -eq 0 && echo this is admin
this is admin
[root@server ~]# [ $(id -u) -ne 0 ]  || echo this is admin
this is admin
[root@server ~]# [ $(id -u) -eq 0 ]  && echo this is admin || echo this is not admin
this is admin
[root@server ~]# su - stu1
[stu1@server ~]$ [ $(id -u) -eq 0 ]  && echo this is admin || echo this is not admin
this is not admin
  • 类C风格的数值比较
注意:在(( ))中,=表示赋值;==表示判断
[root@server ~]# ((1==2));echo $?
[root@server ~]# ((1<2));echo $?
[root@server ~]# ((2>=1));echo $?
[root@server ~]# ((2!=1));echo $?
[root@server ~]# ((`id -u`==0));echo $?

[root@server ~]# ((a=123));echo $a
[root@server ~]# unset a
[root@server ~]# ((a==123));echo $?
  • 字符串比较
注意:双引号引起来,看作一个整体;= 和 == 在 [ 字符串 ] 比较中都表示判断
[root@server ~]# a='hello world';b=world
[root@server ~]# [ $a = $b ];echo $?
[root@server ~]# [ "$a" = "$b" ];echo $?
[root@server ~]# [ "$a" != "$b" ];echo $?
[root@server ~]# [ "$a" !== "$b" ];echo $?        错误
[root@server ~]# [ "$a" == "$b" ];echo $?
[root@server ~]# test "$a" != "$b";echo $?

test  表达式
[ 表达式 ]
[[ 表达式 ]]

思考:[ ] 和 [[ ]] 有什么区别?

[root@server ~]# a=
[root@server ~]# test -z $a;echo $?
[root@server ~]# a=hello
[root@server ~]# test -z $a;echo $?
[root@server ~]# test -n $a;echo $?
[root@server ~]# test -n "$a";echo $?

# [ '' = $a ];echo $?
-bash: [: : unary operator expected
2
# [[ '' = $a ]];echo $?
0

[root@server ~]# [ 1 -eq 0 -a 1 -ne 0 ];echo $?
[root@server ~]# [ 1 -eq 0 && 1 -ne 0 ];echo $?
[root@server ~]# [[ 1 -eq 0 && 1 -ne 0 ]];echo $?
② 逻辑运算符总结
1. 符号;和&&和||都可以用来分割命令或者表达式
2. 分号(;)完全不考虑前面的语句是否正确执行,都会执行;号后面的内容
3. `&&`符号,需要考虑&&前面的语句的正确性,前面语句正确执行才会执行&&后的内容;反之亦然
4. `||`符号,需要考虑||前面的语句的非正确性,前面语句执行错误才会执行||后内容;反之亦然
5. 如果&&和||一起出现,从左往右依次看,按照以上原则

以上就是Shell脚本中条件判断语句的语法结构和用法的介绍,自己动手尝试下条件语句的使用方法吧,更多内容欢迎关注行业资讯频道!

相关内容

热门资讯

14对14,中国反击欧盟,干净... 对于欧盟的指手画脚,中国第一时间反击了。14:14。干净利落,来而不往非礼也。国际博弈,从来如此:没...
风未到,人已行!凌晨不眠!一场... 7月24日晚,台风“红霞”持续逼近,市应急管理局五楼会议室灯火通明,市应急管理局党委书记、局长李见秋...
省自然资源厅部署12号台风“红... 受今年第12号台风“红霞”影响,我省中部和南部地区有一轮强降雨过程,部分地区有较高的地质灾害风险。自...
长虹美菱获得发明专利授权:“一... 证券之星消息,根据天眼查APP数据显示长虹美菱(000521)新获得一项发明专利授权,专利名为“一种...
女童毕业照走光维权反遭辱骂,是... 毛乐然(南京传媒学院)杭州一家摄影机构拍摄的女童毕业照出现走光问题,家长维权反遭恶语相向,令人愤慨。...
给“AI”发身份证!国内首个智... 《人工智能 智能体互联》系列国家标准应用推进专题会议近日在北京中关村展示中心召开。现场发布GB/Z1...
探秘科技殿堂 点亮科学梦想—中... 为拓宽青少年科学视野,丰富课外实践内容,激发学生科技创新思维与探索精神,7月23日,原州区中河乡中心...
小米申请音频处理方法专利,能够... 国家知识产权局信息显示,北京小米移动软件有限公司申请一项名为“音频处理方法、装置、电子设备、存储介质...
中纪委最新通报:上半年立案省部... △图1:全国纪检监察机关处分人员按职级划分图△图2:全国纪检监察机关运用“四种形态”占比图2026年...
刚刚,Claude Opus ... 昨晚,科技圈刚上演了一场开源 AI 大团建。英伟达创始人黄仁勋在社交媒体发表公开信,拉上 Meta、...