Shell(6)if判断
前言
之间说道变量之间的运算和判断,当我们在shell脚本中进行过运算和判断之后根据不同的结果需要分别执行下一步操作的时候就需要使用到if判断语句。
实际上使用“&&”和“||”逻辑测试已经可以完成简单的判断并执行相应的操作,但是当需要选择执行的命令语句较多时,这种方式将使执行代码显得很复杂,不好理解。而使用专用的 if 条件语句,可以更好地整理脚本结构,使得层次分明, 清晰易懂
if字面意思就是如果,即:如果怎么样,那就怎么样——if+条件测试+then+命令。
if判断语句三种结构:1.单分支结构;2.双分支结构;3.多分支结构。
一、单分支结构
对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。
语法结构为:
if [条件测试]
then 命令序列
fi
或:
if [条件测试];then #如果测试结果为……则
命令序列 #执行以下命令
fi #结束判断(必须加,不然报错)
例:如果1=1,则输出yes。
执行流程:首先判断条件测试操作的结果,如果返回值为 0,表示条件成立,执行 then 后面的命令序列,一直到遇见 fi 结束判断为止,继续执行其他脚本代码; 如果返回值不为 0,则忽略 then 后面的命令序列,直接跳至 fi 行以后执行其他脚本代码。
所以单分支结构的if条件判断语句可看出,我们只有在条件判断生效的时候才执行then后面的命令,不生效的时候因为上图fi后面没有再写命令了,所以不执行任何命令直接结束脚本。
二、双分支结构
双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作。
语法结构为:
if [条件测试]
then
命令序列1
else
命令序列2
fi
或:
if [条件测试];then #如果判断的结果为真,则
命令序列1 #执行以下命令1
else #否则
命令序列2 #执行以下命令2
fi #结束判断
例:当1等于2则输出yes,否则输出no
执行流程:首先判断条件测试操作的结果,如果返回值为 0,表示条件成立,执行 then 后面的命令序列,一直到遇见 fi 结束判断为止,继续执行其他脚本代码; 如果返回值不为 0,则忽略 then 后面的命令序列,执行 else 后面的命令序列,直接跳至 fi 行以后执行其他脚本代码。
三、多分支结构
与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作
语法结构为:
if [条件测试1];then #如果测试1结果为真则
命令序列1 #执行以下命令1
elif [条件测试2];then #否则如果再测试2结果为真则
命令序列2 #执行以下命令2
else #否则
命令序列3 #执行以下命令3
fi #结束判断
例:判断如果1大于2,则输出“1大于2”;否则判断如果1大于0的话,则输出“1大于0”;如果以上都不成立则输出“no”。
执行流程:首先判断条件测试1操作的结果,如果返回值为 0,表示条件成立,执行 then 后面的命令序列,一直到遇见 fi 结束判断为止,继续执行其他脚本代码; 如果返回值不为 0,则判断条件测试2操作的结果,如果返回值为 0,表示条件成立,执行 then 后面的命令序列,一直到遇见 fi 结束判断为止,继续执行其他脚本代码;否则忽略 then 后面的命令序列,执行 else 后面的命令序列,直接跳至 fi 行以后执行其他脚本代码。
由此可见if多分支语句是当满足条件1时,执行命令1—>当不满足条件1时,往下走,判断是否满足条件2,如果满足条件2则执行命令2—>如果不满足条件2,则继续往下走,直到走到else语句,说明之前的条件都不满足,最终执行命令3。
总结
if判断是脚本中非常常用且强大的脚本语法,可以帮助我们在判断日志信息,解决报错,搭建环境等需求中起到至关重要的作用,用好if判断语句可以帮助我们写出功能完善的shell脚本。
END