Shell脚本中条件判断语句的语法结构和用法
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章为大家带来有关Shell脚本中条件判断语句的语法结构和用法详细介绍。大部分命令和知识点都是大家经常用到的,为此分享给大家做个参考。一起跟随小编过来看看吧。一、条件判断语法结构思考:何为真(tr
千家信息网最后更新 2025年12月03日Shell脚本中条件判断语句的语法结构和用法
这篇文章为大家带来有关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 adminthis is admin[root@server ~]# [ $(id -u) -ne 0 ] || echo this is adminthis is admin[root@server ~]# [ $(id -u) -eq 0 ] && echo this is admin || echo this is not adminthis is admin[root@server ~]# su - stu1[stu1@server ~]$ [ $(id -u) -eq 0 ] && echo this is admin || echo this is not adminthis 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 expected2# [[ '' = $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脚本中条件判断语句的语法结构和用法的介绍,自己动手尝试下条件语句的使用方法吧,更多内容欢迎关注行业资讯频道!
文件
条件
表达式
语句
字符
参数
字符串
含义
内容
语法
权限
格式
符号
结构
高级
命令
用户
目录
逻辑
脚本
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
织梦数据库文件在哪
双网卡设定程序数据库
爱乐网互联网科技
做软件开发一共分几种
松江区项目数据库服务商销售价格
燃烧的远征数据库 下载
社会科学外文权威数据库
网络安全问题解决报告
涂扬软件开发了什么
哪些网游没有服务器
常用的电子图书数据库
家用服务器多久更换一次硬盘
网络安全这部法律你需要知道
浪潮服务器5280进入raid
计算机网络技术实习手册怎么填
sql数据库主键怎么自动生成
中国企业网络安全资讯
天津网信网络安全
服务器打包源码教程
女生适合做数据库吗
abaqus如何解锁输出数据库
全球产品安全数据库
winccoa是实时数据库吗
黑龙江亿农网络技术有限公司
软件开发股票走势
汽车后市场应用软件开发商
数据库导入导出技巧
全球多少个根服务器
湖南品质软件开发价格标准
菜鸟网络技术支持工程师