当前位置:网站首页>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
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esac
case语句注意事项
case行首必须为单词“in”,每一模式必须以单个右括号")"结束
双分号";;"表示命令序列的结束
模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。
最后的)表示默认模式,其中的相当于通配符
边栏推荐
- Shenzhen Offline Registration|StarRocks on AWS: How to conduct rapid and unified analysis of real-time data warehouses
- MySQL 出现 The table is full 的解决方法
- 13.机器学习基础:数据预处理与特征工程
- 2022 Henan Mengxin League Game (4): Zhengzhou University of Light Industry E - Sleep Well
- 我将GuiLite移植到了STM32F4开发板上
- Problems that need to be solved for interrupting the system
- MySql 创建索引
- 9.新闻分类:多分类问题
- Record some bugs encountered - when mapstruct and lombok are used at the same time, the problem of data loss when converting entity classes
- Browser listens for tab closing
猜你喜欢
随机推荐
计组错题集
寄存器(内存访问)
Assembly answers
社交电商:流量红利已尽,裂变营销是最低成本的获客之道
TCP 和UDP 的详细介绍
2022 Henan Mengxin League Game (4): Zhengzhou University of Light Industry E - Sleep Well
t conditional judgment statement and if loop
How many moments have you experienced the collapse of electronic engineers?
传统企业如何转型社交电商,泰山众筹的玩法有哪些?
conda常用命令合集
基于WPF重复造轮子,写一款数据库文档管理工具(一)
v-text指令:设置标签内容
install ambari
v-on指令:为元素绑定事件
肖sir__自动化面试题
社交电商如何做粉丝运营?云平台怎么选择商业模式?
HI3521D 烧录128M nand flash文件系统过程-一定要注意flash的容量
"Obs" start pushing flow failure: the Output. The StartStreamFailed call process
基于Streamlit的YOLOv5ToX模型转换工具(适用YOLOv5训练出来的模型转化为任何格式)
中断系统需要解决的问题