Shell编程之条件语句

条件测试

Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功,当返回值为0时表示成功,否则表示失败或异常(非0值)。

使用专门的测试工具 test 命令,可以对特定条件进行测试,并根据返回值(值为0)来判断是否成立。

test 条件表达式

[ 条件表达式 ]                  #条件表达式的两边都需要有空格,没有空格会报错,且此方法更为常用

[[ 条件表达式 ]]

选项:

-a 文件是否存在(-a取反会有问题 建议使用 -e

-e 文件是否存在

-f 判断是否是普通文件

-d 判断是否是目录文件

-r 判断当前用户对文件是否可读

-w 判断当前用户对文件是否可写

-x 判断当前用户对文件是否可执行

ps:[ ] 和 [[ ]] 区别 []不支持正则核通配符 [[]]支持

 对于超级管理员所有权限 :除了x 其他不适受限

1. 其他人没有rw 超级管理员也有

2. 其他人没有x 超级管理员也没有,只要其他用户有x超级管理员也有

整数比较

通式: [ 整数1 操作符 整数2 ]

操作符:

-eq 等于

-ne 不等于

-lt 小于

-gt 大于

-le 小于等于

-ge 大于等于

字符串比较

格式:

[ 字符串1=字符串2 ]

[ 字符串1!=字符串2 ]

[ -z 字符串 ]

常用的测试操作符:

=:第一个字符串和第二个字符串相同

!=:第一个字符串与第二个字符串不相同,其中“!”符号表示取反

-z:字符串内容为空

逻辑测试

逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同条件时,判断是根据这些条件同时成立还是只要有其中一个成立等情况,需要有一个测试过程。

格式:

[ 表达式1 ] 操作符 [ 表达式2 ]

命令1 操作符 命令2

常用的测试操作符:

&&:逻辑与,表示而且,只有当两个条件都成立时,整个测试命令的返回值才为0(结果成立)。
使用Test命令测试时,“&&”可改为“-a”。

||:逻辑或,表示或者,只要前后两个条件有一个成立,整个测试命令的返回值即为0(结果成立)。
使用Test命令测试时,“||”可改为“-o”。

!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)。
 

短路与(且) : &&

全真才为真,一假即为假

cmd1 && cmd2

1. 第一个命令是假的 没有必要再执行命令2 应为肯定为假

2. 第一个命令是真的 我要执行命令2后才能判断是否为真

短路或(或者): ||

一真即为真,全假才为假

cmd1 || cmd2

1. 第一个命令是真的,不需要执行命令2,应为肯定为真

2. 第一个命令是假的,才会执行命令2后 判断整个式子是否为真

if:条件判断语句

单分支if语句

对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。

语法格式:

if 条件测试操作
then
    命令序列
fi

双分支的if语句

对于双分支的选择结构,要求针对“条件成立”“条件不成立”两种情况分别执行不同的操作。

格式:

if 条件测试操作
then
    命令序列1
else
    命令序列2
fi

多分支的if语句

多分支结构能够根据多个互斥的条件分别执行不同的操作,实际上等同于嵌套使用的if语句。

 

​​​​​​​case

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

格式:

case 变量值 in 
模式一)
   命令序列
;;
模式二)
   命令序列 
;;
……
*)
   默认命令序列
esac

 

case语句注意事项

  • case行首必须为单词“in”,每一模式必须以单个右括号")"结束
  • 双分号";;"表示命令序列的结束
  • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。
  • 最后的*)表示默认模式,其中的*相当于通配符

 


 


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值