当前位置:网站首页>Shell编程之条件语句
Shell编程之条件语句
2022-08-01 21:11:00 【怕失眠】
目录
一. 条件测试
要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。
Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为 0 时表示成功,否则(非 0 值)表示失败或异常。使用专门的测试工具——test 命令,可以对特 定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立)。
1.test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
(1)格式1: test 条件表达式
(2)格式2: [ 条件表达式 ] 注意中括号和表达式中间需要隔一个空格
(3)格式3:[[ 条件表达式 ]]
2.文件测试
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。
[ 操作符 文件或目录 ]
3.常用的测试操作符
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-b:测试是否为设备文件
-c:测试是否为字符设备文件
-s:测试存在且文件大小为空
-L:测试是否为链接文件
执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。
判断的表达方式:
1. test
2.[ ]
3.[[ ]]
[ ]和[[ ]]区别:[ ]:不支持正则和通配符 [[ ]]:支持
通式: test 选项 测试的内容
[ ]
没有空格会报错
-a -e 的区别 -a取反会有问题 建议使用-e
[[ ]]加强版的[ ]
正则表达式:过滤文件中的内容
通配符:去找文件名,无法处理文件中的内容
使用两个[[ ]] 要使用2个== 右边使用通配符
=~右边可以使用正则表达式
正则当中:
.代表任意一个字符
.*任意字符
\ 代表本来含义
5.常用的测试操作符
整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的操作选项使用时将操作选项放在要比较的两个整数之间。
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
6.字符串比较
字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。
(1)格式1
[ 字符串1=字符串2 ]
[ 字符串1 !=字符串2 ]
(2)格式2
[ -z字符串 ]
7.常用的测试操作符
=:字符串内容相同
!=:字符串内容不同,!号表示相反的意思
-Z:字符串内容为空
8.逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。
常用的逻辑测试操作使用时放在不同的测试语句或命令之间。
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ....
格式2:命令1 操作符 命令2 ...
9.常用的测试操作符
&&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值 才为 0(结果成立)。使用 test命令测试时,“&&”可改为“-a”。
||:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为 0(结果成立)。使用 test 命令测试时,“||”可改为
短路与(且): &&
全真才为真,一假即为假
cmd1&& cmd2
1.第一个命令是假的,没有必要再执行命令2 应为肯定为假
2.第一个命令是真的,执行命令2后才能判断是否为真
短路或(或者)∶ll
一真即为真,全假才为假
cmd1 |l cmd2
1.第一个命令是真的,不需要执行命令2,应为肯定为真
2.第一个命令是假的,才会执行命令2后,判断整个式子是否为真
cmd1成立 执行cmd2
短路与,短路或使用 只有一种模式:cmd1 && cmd2 || cmd3
vim +行数+脚本:即可跳转到所要寻找的位置(适用于方便查找脚本错误)
二、if语句的结构
实际上使用“&&”和“||”逻辑测试已经可以完成简单的判断并执行相应的操作,但是当需要选择执行的命令语句较多时,这种方式将使执行代码显得很复杂,不好理解。而使用专用的 if 条件语句,可以更好地整理脚本结构,使得层次分明, 清晰易懂
1.单分支结构
单分支 if 语句:对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。
if 条件测试操作
then 命令序列
fi
或者
if 条件测试操作;then
命令序列
fi
2.双分支结构
双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作
if 条件测试操作
then
命令序列1
else
命令序列2
fi
3.多分支结构
与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then命令序列2
else
命令序列3
fi
边栏推荐
- C陷阱与缺陷 第5章 库函数 5.5 库函数signal
- Questions I don't know in database kernel interview(1)
- 2022年秋招,软件测试开发最全面试攻略,吃透16个技术栈
- JSD - 2204 - Knife4j framework - processing - Day07 response results
- tiup mirror grant
- C pitfalls and pitfalls Chapter 7. Portability pitfalls 7.10 Free first, then realloc
- Interview Blitz 70: What are sticky packs and half packs?How to deal with it?
- C陷阱与缺陷 第8章 建议与答案 8.2 答案
- 线上一次JVM FullGC搞得整晚都没睡,彻底崩溃~
- Realize the superposition display analysis of DWG drawing with CAD in Cesium
猜你喜欢
随机推荐
property语法
30+的女性测试人面试经验分享
写给刚进互联网圈子的人,不管你是开发,测试,产品,运维都适用
附录A printf、varargs与stdarg A.3 stdarg.h ANSI版的varargs.h
PyQt5 + MySQL5.8 【学生信息管理系统】【增删改查】
在Cesium中实现与CAD的DWG图叠加显示分析
R语言 pca主成分分析的主要方法
测试开发人均年薪30w+?软件测试工程师如何进阶拿到高薪?
淘宝获取收货地址列表的 API
TP5-NPs负载噻吩类化合物TP5白蛋白纳米粒/阿魏酸钠新糖牛血清蛋白纳米粒
方舟生存进化是什么游戏?好不好玩
C陷阱与缺陷 第7章 可移植性缺陷 7.11 可移植性问题的一个例子
Review Set/Map basics with these two hooks
方舟开服需要知道的那些事
How to make the timer not execute when the page is minimized?
Excel advanced drawing techniques, 100 (22) - how to respectively the irregular data
Pytorch框架学习记录13——利用GPU训练
C pitfalls and pitfalls Chapter 7. Portability pitfalls 7.10 Free first, then realloc
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
技能大赛训练:A部分加固题目