当前位置:网站首页>Shell编程的条件语句
Shell编程的条件语句
2022-08-04 09:03:00 【千城泪1999】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、条件测试
1.test命令
要使 Shell脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的情况以确定执行何种操作。
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具——test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。
格式1:test条件表达式
格式2:[ 条件表达式 ]
2.文件测试
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。
文件测试的常见操作选项如下,使用时将测试对象放在操作选项之后即可。

执行条件测试操作以后,通过预定义变量 ? 可以获得测试命令的返回状态值,从而判断该条件是否成立。执行以下操作可测试目录 / m e d i a / 是否存在,如果返回值 ?可以获得测试命令的返回状态值,从而判断该条件是否成立。 执行以下操作可测试目录/media/是否存在,如果返回值 ?可以获得测试命令的返回状态值,从而判断该条件是否成立。执行以下操作可测试目录/media/是否存在,如果返回值?为0,表示存在此目录,否则表示不存在或者虽然存在但不是目录
1.测试是否为文件
2.测试目录或文件是否存在
3.测试是否为目录
4.测试是否为设备文件
5.测试 当前用户是否有权限执行
6.test可用 [ ] 代替
3.整数值比较
| -eq | 第一个数等于(Equal)第二个数 |
| -ne | 第一个数不等于(Not Equal)第二个数 |
| -gt | 第一个数大于(Greater Than)第二个数 |
| -lt | 第一个数小于(Lesser Than)第二个数 |
| -le | 第一个数小于或等于(Lesser or Equal)第二个数 |
| -ge | 第一个数大于或等于(Greater or Equal)第二个数 |
4.字符串比较
| 常用操作符 | 说明 |
| = | 字符串内容相同 |
| != | 字符串内容不同,!号表示相反的意思 |
| -z | 字符串内容为空 |
| -n | 检查是否有字符串存在 |
格式1 [ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2 [ -z 字符串 ]
5.逻辑测试
| 常用操作符 | 说明 |
| -a或&& | 逻辑与,而且的意思 |
| -o或 | 逻辑或,或者的意思 |
| ! | 逻辑否 |
格式一:【 表达式1 】 操作符 【 表达式2 】
格式二: 命令1 操作符 命令2


&&、||操作符能够正常存在[[ ]]条件判断结构中,但是如果出现在一个[ ]结构中,就会报错
二、if语句
1.单分支结构
根据判断输出结果
if 条件测试操作
then 命令序列
fi

判断/目录下是否有qian这个目录,如果没有的话 创建一个qian目录

注意:
单个括号(【】):必须要有空格 两个字符或数字之间的比较左右必须有空格
条件判断:
test一种形式,【】中间只能使用=和!=比较字符串,如果使用< 、>需要进行转义\.
然后中间如果比较数字要用-lt 等符号,不能使用 \< 比较数字,他会当成字符串处理
两个括号【【 】】 :可用于处理逻辑命令,也可以处理字符串是否相等,且使用< 、>不用转义符
2.双分支结构
根据判断输出不同结果
if 条件测试操作
then
命令序列 1
else
命令序列 2
fi

例:
判断目标主机是否存活,存活就打印is up,如果不存活就打印is down

3.if多分支结构
根据多个判断输出结果
多分支结构
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
else
命令序列3
fi
例:

4.if嵌套语句
例:
判断是否安装hppd服务,如果没有就安装

注意等号两边同为字符串必须有空格,可以将==换成-a,两边同为变量值时要引号不要空格。
三、case语句的结构
case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case 语句主要适用于以下情况: 某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值。
1、case多分枝结构
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esac

2、case语句注意事项
①case行首必须以单词“in”,每一模式必须以单个右括号")"结束
②双分号";;"表示命令序列的结束
③模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。
最后的*)表示默认模式,其中的*相当于通配符
3、case 语句的执行流程
首先使用“变量值”与模式 1 进行比较,若取值相同则执行模式 1 后的命令序列,直到遇见双分号“;;”后跳转至 esac,表示结束分支;若与模式 1 不相匹配, 则继续与模式 2 进行比较,若取值相同则执行模式 2 后的命令序列,直到遇见双分号“;;”后 跳转至 esac,表示结束分支……依此类推,若找不到任何匹配的值,则执行默认模式“*)” 后的命令序列,直到遇见 esac 后结束分支。
例1:
查看数字对应的英文

例2:
学校田径会,10分满分,8-10分(不包括8分)为优秀,6-8分(不包括6分)为合格 0-6分,不合格,请以交互时的方式,询问“请输入学生的田径比赛分数,来判定评级:

边栏推荐
- 去掉js代码文件所有注释
- LVGL's multi-language conversion tool -- a good assistant for font settings
- TCP的四次挥手
- 蜜芽CEO刘楠:垂直电商黄金时代已落幕 坚定转型品牌之路
- OAK-FFC-4P全网首次测试
- oracle sql 多表查询
- 继承和static关键字
- DOM简述
- Detailed Explanation of Addresses Delivered by DHCP on Routing/Layer 3 Switches [Huawei eNSP]
- How to restore the Youxuan database with only data files
猜你喜欢
随机推荐
技术实现 | 图像检索及其在淘宝的应用
我和 TiDB 的故事 | 缘份在,那就终是能相遇的
After four years of outsourcing, the autumn recruits finally landed
【正点原子STM32连载】第四章 STM32初体验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
ShuffleNet v2 network structure reproduction (Pytorch version)
How Oracle for current library or certain library data on the same server number?
leetcode经典例题——49.字母异位词分组
How to restore the Youxuan database with only data files
ZbxTable 2.0 重磅发布!6大主要优化功能!
[Computer recording screen] How to use bandicam to record the game setting graphic tutorial
软件工程国考总结——判断题
华为od项目
外包干了四年,秋招终于上岸了
2022年制冷与空调设备运行操作特种作业证考试题库及模拟考试
oracle sql multi-table query
[Punctuality Atom STM32 Serial] Chapter 4 STM32 First Experience Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1
Inheritance and the static keyword
学会 Arthas,让你 3 年经验掌握 5 年功力
leetcode二叉树系列(二)
今年37了,被大厂抢着要...









