当前位置:网站首页>Shell编程条件语句
Shell编程条件语句
2022-08-01 21:16:00 【Y坚定的唯物主义者】
目录
一、条件测试
- 文件测试与整数测试
- 字符串测试与逻辑测试
要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。
Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为 0 时表示成功,否则(非 0 值)表示失败或异常。使用专门的测试工具——test 命令,可以对特 定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立)。
1.test命令
测试表达式是否成立,若成立返回 0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
常用的测试操作符
① 执行条件测试操作以后,通过预定义变量 echo( $? )可以获得测试命令的返回值,而判断该条件是否成立。
② [ ] 用法 中括号和表达式中间需要隔一个空格
属性测试
-s FILE #是否存在且非空-t FD #FD 文件描述符是否在某终端已经打开
-N FILE #文件自从上一次被读取之后是否被修改过
-O FILE #当前有效用户是否为文件属主
-G FILE #当前有效用户是否为文件属组
2.条件测试
判断某需求是否满足,需要由测试机制来实验,专用的测试表达式需要由测试命令辅助完成
常用的测试操作符
3.字符串比较
字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。字符串比较的常用操作选项如下。
- 单个 括号([ ]) : 必须要有空格,两个字符或数字之间的比较左右必须有空格,
- 条件判断:test 一种形式,[ ] 中间只能使用 = 和 != 比较字符串,如果使用 < 、 > 需要加转义字符 “ \ ” 。
- 两个括号 ( [[ ]]) : 可以用于处理逻辑命令,也可以处理字符串是否相等,且使用 < 、> 不需要转义字符 “ \ ”。
常用选项
= | 第一个字符串 和 第二个字符串相同 |
!= | 第一个字符串与第二个字符串不相同,其中“ !”符号表示取反 |
-z | 检查字符串是否为空(zero),对于未定义或赋予控制的变量将视为空串 |
格式1:
[ 字符串1 = 字符串2 ]或[ 字符串1 == 字符串2 ]
[ 字符串1 != 字符串2 ] #有数字最好用引号引用
格式2:
[ -z 字符串 ]#检查字符串是否为空Zero,还能判断变量是否空串
[ -n 字符串 ]#检查是否有字符串存在,如果需要用变量加双引号引用
4.逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。
常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间。
-a或&&:逻辑与,“而且” 的意思,全真才为真
-o或||:逻辑或,“或者” 的意思,有真即为真
!:逻辑否,取反不等于的意思
逻辑符&&
逻辑符 ||
二、if语句
1、if单分支语句
if 条件测试操作
then 命令序列
fi
2、if双分支语句
if 条件测试操作
then 命令序列1
else 命令序列2
fi
3、if多分支语句
登录后复制
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else 命令序列3
fi
学生考试成绩判断
圆的面积计算案例
边栏推荐
- 2022年秋招,软件测试开发最全面试攻略,吃透16个技术栈
- C Pitfalls and Defects Chapter 5 Library Functions 5.5 Library Function Signal
- 关键字搜索:“淘宝商品 API ”
- Review Set/Map basics with these two hooks
- 一个关于操作数据库的建议—用户密码
- Pytorch框架学习记录10——线性层
- 淘宝获取收货地址列表的 API
- 附录A printf、varargs与stdarg A.1 printf函数族
- C陷阱与缺陷 第8章 建议与答案 8.1 建议
- C陷阱与缺陷 第7章 可移植性缺陷 7.11 可移植性问题的一个例子
猜你喜欢
随机推荐
使用百度EasyDL实现厂区工人抽烟行为识别
R语言 线性回归的有关方法
测试开发人均年薪30w+?软件测试工程师如何进阶拿到高薪?
Popular explanation: what is a clinical prediction model
PyTorch笔记 - Attention Is All You Need (2)
Internet使用的网络协议是什么
C语言_联合体共用体引入
MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
牛血清白蛋白-葡聚糖-叶黄素纳米颗粒/半乳糖白蛋白磁性阿霉素纳米粒的制备
测试的意义并不是能找到全部的缺陷
Pytorch框架学习记录13——利用GPU训练
Telnet弱口令渗透测试
网红驼背矫正产品真的管用吗?如何预防驼背?医生说要这样做
ISC2022 HackingClub white hat summit countdown 1 day!Most comprehensive agenda formally announced!Yuan universe, wonderful!
15 分钟带你入门 Grafana
附录A printf、varargs与stdarg A.3 stdarg.h ANSI版的varargs.h
Questions I don't know in database kernel interview(1)
ORI-GB-NP半乳糖介导冬凌草甲素/姜黄素牛血清白蛋白纳米粒的研究制备方法
牛血清白蛋白刺槐豆胶壳聚糖缓释纳米微球/多西紫杉醇的纳米微球DTX-DHA-BSA-NPs
Get started with Grafana in 15 minutes