当前位置:网站首页>Shell条件语句判断
Shell条件语句判断
2022-08-03 04:15:00 【G咖喱炒饭】
目录
一、test命令
命令格式
Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功,当返回值为0时表示成功,否则表示失败或异常(非0值)。
使用专门的测试工具 test 命令,可以对特定条件进行测试,并根据返回值(值为0)来判断是否成立。
格式1:test 条件表达式
格式2:[条件表达式]
格式3:[[条件表达式]]
区别 双括号可以模糊匹配文件测试
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。
基本格式:
[ 操作符 文件或目录 ] (注意两端要有空格) # !代表取反 [ ! 操作符 文件或目录 ]| 常用操作符 | 说明 |
|---|---|
| -d | 测试是否为目录(Directory) |
| -e | 测试目录或文件是否存在(Exist) |
| -f | 测试是否为文件(File) |
| -r | 测试当前用户是否有权限读取(Read) |
| -w | 测试当前用户是否有权限执行(excute) |
| -x | 测试当前用户是否有权限执行 |
| -b | 测试是否为设备文件 |
| -c | 测试是否为字符设备 |
| -s | 测试存在且文件大小为空 |
| -L | 测试是否为链接文件 |
用test命令进行测试

用[ 条件表达式 ]测试

二、数值比较
整数值比较是指根据给定的两个整数值来判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。
基本格式和常用选项如下:
| 格式 | 说明 |
|---|---|
| -eq | 第一个数等于(Equal)第二个数 |
| -ne | 第一个数不等于(Not Equal)第二个数 |
| -gt | 第一个数大于(Greater Than)第二个数 |
| -lt | 第一个数小于(Lesser Than)第二个数 |
| -le | 第一个数小于或等于(Lesser or Equal)第二个数 |
| -ge | 第一个数大于或等于(Greater or Equal)第二个数 |
判断当前已登录的用户数,当小于5个时输出“太少了”

三、字符串比较
字符串比较格式:
[ 字符串1 = 字符串2 ]
注意空格
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]常用的测试操作符:
=:第一个字符串和第二个字符串相同
!=:第一个字符串与第二个字符串不相同,其中“!”符号表示取反
-z:字符串内容为空
使用两个[[ ]] 要使用2个== 右边使用通配符交互操作,用户输入yes或no来确认某个任务

四、逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同条件时,判断是根据这些条件同时成立还是只要有其中一个成立等情况,需要有一个测试过程。
格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
&&:逻辑与,表示而且,只有当两个条件都成立时,整个测试命令的返回值才为0(结果成立)。
使用Test命令测试时,“&&”可改为“-a”。
||:逻辑或,表示或者,只要前后两个条件有一个成立,整个测试命令的返回值即为0(结果成立)。
使用Test命令测试时,“||”可改为“-o”。
!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)。

五、if语句
实际上使用“&&”和“||”逻辑测试已经可以完成简单的判断并执行相应的操作,但是当需要选择执行的命令语句较多时,这种方式将使执行代码显得很复杂,不好理解。而使用专用的 if 条件语句,可以更好地整理脚本结构,使得层次分明, 清晰易懂
1、单分支的if语句
语法格式:
if 条件测试操作
then
命令序列
fi
单分支if语句的执行流程:首先判断条件测试操作的结果,结果返回值为0,表示条件成立,则执行then后面的命令序列,一直遇到fi结束判断为止,继续执行其他代码。如果返回值不为0,则忽略then后面的命令序列,直接跳至fi行以后执行其他脚本代码。
2、双分支的if语句
对于双分支的选择结构,要求针对“条件成立”“条件不成立”两种情况分别执行不同的操作。
语法格式
if 条件测试操作
then
命令序列1
else
命令序列2
fi
双分支if语句的执行流程:首先判断条件测试操作的结果,如果条件成立,则执行then后面的命令序列1,忽略else及后面的命令序列2,直到遇见fi结束判断;如果条件不成立,则忽略then及后面的命令序列1,直接跳至else后面的命令序列2并执行,直到遇见fi结束判断。
测试主机是否开启:

测试当前用户是否是root用户:

3、多分支的if语句
多分支结构能够根据多个互斥的条件分别执行不同的操作,实际上等同于嵌套使用的if语句。

根据 男(学号11-20)8-10分为优秀 6-7合格 女(学号1-10)7-10分为优秀 6分为合格 ,6分以下全部不合格执行判断


六、case分支语句
case 分支语句格式
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esaccase语句注意事项
case行首必须为单词“in”,每一模式必须以单个右括号")"结束
双分号";;"表示命令序列的结束
模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。
最后的)表示默认模式,其中的相当于通配符


边栏推荐
- 汇编书摘抄
- 阿里面试官:聊聊如何格式化Instant
- Smart fitness gesture recognition: PP - TinyPose build AI virtual trainer!
- MySql 创建索引
- Shenzhen Offline Registration|StarRocks on AWS: How to conduct rapid and unified analysis of real-time data warehouses
- Record some bugs encountered - when mapstruct and lombok are used at the same time, the problem of data loss when converting entity classes
- 10.预测房价:回归问题
- mysql 创建索引的三种方式
- MySQL【约束】
- 移动流量的爆发式增长,社交电商如何选择商业模式
猜你喜欢
随机推荐
记录一些遇见的bug——mapstruct和lombok同时使用时,转换实体类时数据丢失问题
Redis-Redisson介绍和用途
寄存器(内存访问)
t条件判断语句与if循环
富瑞宣布战略交易,以简化运营,持续专注于打造领先的独立全服务型全球投行公司
数商云供应链集成系统开发方案:多行业集成平台管理自动化
移植RT-Thread编译报错thumb conditional instruction should be in IT block
测开:项目管理模块-项目curd开发
Assembly answers
基于WPF重复造轮子,写一款数据库文档管理工具(一)
1.一个神经网络示例
Redis连接不上的报错解决方案汇总
索引创建、删除与使用
【STM32】入门(四):外部中断-按键通过中断动作
高等代数_证明_矩阵乘以自身的转置的特征值不小于0
钢铁电商行业方案:钢铁工业产品全生命周期管理解决方案
v-text指令:设置标签内容
私域流量引流方法?分享购火爆的商业模式,你值得拥有
online test paper concept
StarRocks 7 月社区动态









