条件语句

一 、test 测试命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
执行条件测试操作以后,通过预定义变量 “ $? ” 可以获得测试命令的返回状态值,从而判断该条件是否成立。

1. 文件测试

参数说明
-d测试是否为目录
-e测试目录或文件是否存在
-f测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试是否设置有可执行权限
-s如果文件存在且至少有一个字符则为真
-c如果文件存在且为字符型特殊文件则为真
-b如果文件存在且为块特殊文件则为真

2. 整数值比较

整数值比较指的是根据给定的两个整数值,判断第一个与第二个数的关系。

参数意义
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真

3. 字符串比较

字符串比较通常用来检查用户输入、系统环境等是否满足条件。

参数意义
=等于则为真
!=不等于则为真
-z字符串的长度为零则为真
-n字符串的长度不为零则为真

4. 逻辑测试

逻辑测试指的是判断两个或多大条件之间的依赖关系。

当系统任务取决于多个不同的条件时,判断是根据这些条件同时成立还是只要有其中一个成立等情况,需要有一个测试的过程。常用的逻辑测试操作如下:

参数意义
&&逻辑与,表示 " 而且 " ,只有当前后两个条件都成立,整个测试命令的返回值才为0结果成立。使用test命令测试时,“ && ” 可改为 “ -a ”。
II逻辑或,表示 “ 或者 ”,只要前后两个条件中有一个成立,整个测试命令的返回值即为0结果成立。使用test命令测试时,“ II ” 可改为 “-0” 。
逻辑否,表示 “不”,只有当指定的条件不成立时,整个测试命令的返回值才为0结果成立

二、if语句

if语句是最为程勇的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作。

1. 单分支的 if 语句

“分支“指的是不同测试结果所对应的执行语句,对于单分支的选择结构,只有在”条件成立“时才会执行相应的代码,否则不执行任何操作。格式如下:

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

条件测试操作即条件表达式语句,也可以是其他可执行的命令语句;命令序列指的是一条或多条可执行的命令行,也包括嵌套使用的if语句或其他流程控制语句。
单分支 if 语句的执行流程:首先判断条件测试操作的结果,返回值为0,表示条件成立,则执行then 后面的命令序列,一直到遇见 fi 结束判断为止,继续执行其他脚本代码;如果返回值不为0,则忽略 then 后面的命令序列,直接跳至 fi 行以后执行其他脚本代码。

2. 双分支的 if 语句

对于双分支的选择结构,要求针对 “ 条件成立 ” “ 条件不成立 ” 两种情况分别执行不同的操作。双分支 if 语句的语法格式如下:

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

双分支if语句的执行流程:首先判断条件测试操作的结果,如果条件成立,则执行 then 后面的命令序列 1,忽略else 及后面的命令序列 2,直到遇见 fi 结束判断;如果条件不成立,则忽略 then 及后面的命令序列 1,直接跳至 else 后面的命令序列 2 并执行,直到遇见 fi 结束判断。

3. 多分支的 if 语句

相当于嵌套使用,进行多次判断。语法格式如下:

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

多分支 if 语句的执行流程:首先判断条件测试操作1的结果,如果条件1成立,则执行命令序列1,然后跳转 fi结束判断;如果条件 1 不成立,则继续判断条件测试操作2 的结果。如果条件2 成立,则执行命令序列 2 ,然后跳至 fi 结束判断。如果所有的条件都不满足,则执行 else 后面的命令序列 n,直到遇见 fi 结束判断。

4. case 语句

case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。case 分支语句的语法结构如下:

case 变量值 in
模式 1)
   命令序列 1
   ;;
模式 2)
   命令序列 2
   ;;
   ......
*)
   默认命令序列
seac         

case 语句的执行流程:首先使用 “变量值”与模式1 进行比较,若取值相同则执行模式1 后的命令序列,直到遇见双分号 “;;” 后跳至 esac,表示结束分支;若与模式1不相匹配,则继续与模式2进行比较,若取值相同则执行模式2后的命令序列,直到遇见双分号“;;”后跳转至esac,表示结束分文。以此类推,若找不到任何匹配的值,则执行默认模式*)后的命令序列,直到遇见 esac 后结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值