当前位置:网站首页>shell之条件语句(条件测试、if语句,case语句)
shell之条件语句(条件测试、if语句,case语句)
2022-08-03 03:10:00 【linhaoyanglinhao】
shell之条件语句(条件测试、if语句,case语句)
1条件测试
文章目录
1.1文件测试
shell 环境根据命令根据命令执行后的返回状态值($?) 来判断是否执行成功,当返回值为 0 时,表示成功,非 0 时,表示失败或者异常。使用专门的测试工具------test命令,可以对特定条件进行测试,并根据返回值来判断是否成立。
有三种表示的方式
格式1: test 条件表达式
格式2 : [ 条件表达式 ] 注意中括号和表达式中间需要隔一个空格
格式3 : [[ 条件表达式 ]]
test加选项的含义
-d 测试是否为目录(directory)
-e 测试目录或文件是否存在(exist)
-f 测试是否为文件(file)
-r 测试当前用户是否有权限读取(read)
-w 测试当前用户是否有权限写入(write)
-x 测试是否设置有可执行权限
-b 测试是否为设备文件
-c 测试是否为字符设备文件
-s 测试存在且文件大小为空
-L 测试是否为链接文件
执行条件测试操作以后,通过预定义变量 ( $? )可以获得测试命令的返回值,而判断该条件是否成立。**
例 test的用法

[ ]中括号的用法

1.2整数测试
整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作选项如下,使用时将操作选项发放在要比较的两个整数之间,中间空格隔开。
常用测试操作符
-eq 第一个数 等于(equal) 第二个数
-ne 第一个数 不等于(no equal) 第二个数
-gt 第一个数 大于(greater than) 第二个数
-ge 第一个数 大于或等于(greater or than )第二个数
-lt 第一个数 小于( lesser than )第二个数
-le 第一个数 小于等于(lesser or equal)第二个数
1.3字符串比较
单个 括号([ ]) : 必须要有空格,两个字符或数字之间的比较左右必须有空格,
·条件判断:test 一种形式,[ ] 中间只能使用 = 和 != 比较字符串,如果使用 < 、 > 需要加转义字符 “ \ ” 。
两个括号 ( [[ ]]) : 可以用于处理逻辑命令,也可以处理字符串是否相等,且使用 < 、> 不需要转义字符 “ \ ”。
字符串比较通常来检查用户输入,系统环境等是否满足条件,在提供交互式操作的shell脚本中,也可用来判断用户输入的位置参数是否符合要求。
常用选项
= 第一个字符串和第二个字符串相等
!= 第一个字符串与第二个字符串不相等
-z 检查字符串是否为空
例字符串比较( != )

1.4逻辑测试
根据测试指的是判断两个或多个条件之间的依赖关系,当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个不成立等情况,需要有一个测试过程。
&& 逻辑与,只有两个都成立,才会输出0
|| 逻辑或 只要两个有一个成立,就会输出0
! 逻辑否 表示不,只有当指定条件不成立时,测试结果的命令为0
2if语句介绍
使用“&&” 和 “||” 逻辑测试以及可以简单的判断并执行相应的操作,当需要选择执行的命令语句较多时,这种方式将使执行代码先得很复杂,不好理解,而使用专用的if条件语句,可以更好的整理脚本结构,使得层次分明,清晰易懂。
2.1单分支if语句
对于单分支的选择结构,只有在“ 条件成立”时,才会执行的代码,否则不执行任何操作。

格式
if 条件测试操作
then
命令序列
fi 结尾
例 判断输入文件是否为脚本文件


2.2双分支文件
双分支if语句只是在单分支的基础上针对“ 条件不成立”的请款执行另一种操作,而不是没有任何响应。
格式
if 条件判断[ ]
then
cmd1
else
cmd2
fi

例
c3 发三个包 -W(大写)2 超时等待时间2秒 $1 位置变量 将提示信息放入垃圾桶&>>/dev/null
例2 判断当前用户是不是管理员


2.3多分支语句
与单分支、双分支if语句相比,多分支if语句的结构能够根据多个互斥的条件分别执行不同的操作

例 根据成绩进行不同输出

根据分数判断是优秀,合格还是不合格
例2


3case语句
case语句可以是脚本程序的结构更加清晰、层次分明、常用于服务的启动、重启、停止的脚本。有的服务不提供这种控制脚本,需要用case语句编写。
case语句主要适用于以下情况: 某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列,这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句只需要判断一个变量的不同取值.
3.1case语句的案例
例1,输出一周吃什么

例2

4总结
条件测试
- 文件测试:-d、-f、-e、-r、-w、-x
- 整数测试:-eq、-ne、-gt、-ge、lt、le
- 字符串比较:= 、!=、 -z
- 逻辑测试:&&、||、!
if语句
if开头进行判断,then执行判断成功的语句,else执行判断失败的语句,fi结尾
case
4总结
条件测试
- 文件测试:-d、-f、-e、-r、-w、-x
- 整数测试:-eq、-ne、-gt、-ge、lt、le
- 字符串比较:= 、!=、 -z
- 逻辑测试:&&、||、!
if语句
if开头进行判断,then执行判断成功的语句,else执行判断失败的语句,fi结尾
case
对一个变量的多种形态进行判断。
边栏推荐
猜你喜欢
随机推荐
七夕??继续肝文章才是正道!!Auto.js 特殊定位控件方法
基于flowable的upp(统一流程平台)运行性能优化(3)
PSSecurityException
大佬们,我有点不明白:为什么oracle-cdc的文档写connector可以做到exactly-o
第八章 字符输入输出和输入验证
Sentinel vs Hystrix 限流对比,到底怎么选?
QCheckBox、margin、border、pandding、QHoxLayout、QSplitter、QSpacerItem
ClickHouse—入门
【TA-霜狼_may-《百人计划》】先行部分 手搓视差体积云
记录学习--Navicat使用自定义数据库列表
密码学的基础:X.690和对应的BER CER DER编码
VS中使用BugTrap定位程序崩溃点
C语言实验十三 指针(三)
我终于逃离了互联网,却陷入了迷茫
【GraphQL】使用Hot Chocolate和.NET 6构建GraphQL应用
Best Practices for Migration from Jincang Database from MySQL to KingbaseES (3. MySQL Database Migration Practice)
(一)Nacos注册中心集群环境搭建
怎么用redis限制同一ip重复刷浏览量
compose 位移视图
05-分布式计算框架









