shell编程之条件语句

要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。

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

使用test测试命令时,有以下两种形式:

格式一: test 条件表达式  ​  

格式二: [ 条件表达式 ]  ​

 #注意:每一项之间要有空格,格式二更常用

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。

测试过程,实现评估布尔声明,以便用在条件性环境下进行执行:

  • 若为真,则状态码变量 $? 返回0
  • 若为假,则状态码变量 $? 返回非0

 条件测试语句

文件测试

文件测试格式

 格式一: test 操作符 表达式
 ​
 格式二: [ 操作符 表达式 ]  
复制代码

常用的文件测试操作符:

操作符作用
-d测试文件是否为目录文件(Directory)
-f测试文件是否为普通文件(File)
-e测试目录或文件是否存在(Exist)。建议使用-e,-a可能不准确。
-a测试目录或文件是否存在(Exist)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有权限执行(eXcute)
-L测试是否为符号链接(软链接文件)
-nt判断文件A是否比文件B新
-ot判断文件A是否比文件B旧
-ef判断两个文件是否为同一文件。可用于硬链接,主要判断两个文件是否指向同一个inode。

属性测试补充:

操作符作用
-s FILE判断文件是否存在且非空
-t fdfd 指定文件描述符是否在某终端已经打开
-N FILE文件自从上一次被读取之后是否被修改过
-O FILE当前有效用户是否为文件属主
-G FILE当前有效用户是否为文件属组

 整数测试

整数值比较:

 [  整数变量1  操作符  整数变量2  ] 
 ​
 test 整数变量1  操作符  整数变量2

操作符:

操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

 字符串测试

常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,! 号表示相反的意思
  • -z:字符串内容为空
  • -n:字符是否存在

逻辑测试(短路运算)

逻辑测试用于连接多个测试条件,并返回整个表达式的值。 逻辑测试主要有"逻辑与","逻辑或","逻辑否"三种。

逻辑测试两种格式:

 格式一:[  表达式1  ]  逻辑运算符  [  表达式2  ] ...
 #例:[表达式1] && [表达式2]  等同于  [表达式1 -a 表达式2]  等同于  [[表达式1 && 表达式2]]
 #例:[表达式1] || [表达式2]  等同于  [表达式1 -o 表达式2]  等同于  [[表达式1 || 表达式2]]
 ​
 格式二:命令1  逻辑运算符  命令2  ... 
复制代码

逻辑运算符:

  • -a或&& :逻辑与,“而且”的意思,全真才为真。
  • -o或|| :逻辑或,“或者”的意思,一真即为真。
  • ! :逻辑否。

1)短路与 &&

 CMD1 && CMD2 
 全真才为真,一假即为假。      
 第一个CMD1结果为真 ,第二个CMD2必须要参与运算,才能得到最终的结果。
 第一个CMD1结果为假 ,总的结果必定为假,因此不需要执行CMD2。
 同时满足命令1 和命令2 的要求,才会返回正确。
复制代码

2)短路或 ||

 CMD1 || CMD2
 一真即为真
 第一个CMD1结果为真,总的结果必定为真,因此不需要执行CMD2。
 第一个CMD1结果为假,第二个CMD2必须要参与运算,才能得到最终的结果。

 三元运算符

1、java,C语言

  • 条件表达式?a:b
  • 当条件表达式为真时,取a值;当条件表达式为假时,取b值。

2、shell

  • [ 表达式 ] && a || b
  • 当表达式为真时,取a值;当表达式为假时,取b值。

if 语句

单分支语句格式

if 判断条件  ​  

then

条件成立的分支代码

 ​ fi      

双分支语句格式:

 if 判断条件

 then  

条件成立的分支代码

 else  

条件不成立的分支代码

 fi

多分支语句格式:

 if

判断条件1

 then

  条件1为真的分支代码  ​  

elif 判断条件2

 then

  条件2为真的分支代码  ​

 elif 判断条件3  then  

条件3为真的分支代码  ​  ...  

else  

以上条件都为假的分支代码  ​

 fi

case语句

 case 变量引用 in  

模式1)  

命令分支1  

;;  

模式2)  

命令分支2  

;;  

...

 *)  

默认命令分支  

esac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值