条件判断语句

  • 简介
条件判断语句是一种最简单的流程控制语句,该语句使得程序根据不同的条件来执行不同的程序分支。

使用if语句进行条件判断

语法:
if expression
then
statement1
statement2
fi
或者
if expression; then
statement1
statement2
fi
分号的作用是表示if子句已经结束,后面的代码是then子句

流程分析:

expression 可以是一个表达式或者shell脚本,只有当expression的退出状态码为0(值为真)才会执行then
子句后面的语句,then 后面可以跟多条语句,最后用fi结束if结构

案例1:

判断文件类型,判断 abc.txt是不是一个常规文件

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_if语句

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_if语句_02

案例2:

判断文件是否创建成功

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_运维开发_03

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_运维开发_04

注意:  条件测试可以用test命令,也可以用方括号[]

案例3:

使用空命令作为判断条件,空命令用一个冒号表示 ":", 不做任何事情,但它的退出状态码永远是0,所以条件判断的结果永远为true

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_状态码_05

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_状态码_06

案例4:

  使用&& 操作符代替if语句, 判断当前用户是否是root,如果不是root,则打印&&后面的语句,并且exit显式退出

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_条件判断_07

由于当前用户是root,所以没有任何输出

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_运维开发_08

切换用户

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_条件判断_09

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_条件判断_10

注意:  在使用if语句的时候,一定不要忘记最后的fi结束标志,否则会报以下错误

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_if语句_11


使用if else语句进行流程控制

简介:

比如上面我们又一个案例是判断一个文件是否创建成功,当创建成功的时候会打印一行信息,但是创建不成功则没有任何输出,这样对用户不太友好,所以我们要在文件创建不成功的时候也要给用户一个提示。

语法:

if expression

then

 statement1

 statement2

else

 statement3

 statement4

fi

流程分析:

当expression 为真时, 执行then后面的语句,否则执行else 后面的语句,最后以fi结束 语句块

案例1:

提示用户输入两个数字,如果数字大于10则输出大于10的消息,否则输出小于等于10的消息

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_状态码_12

输入10:

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_条件判断_13

输入20:

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_shell开发_14

案例2:

if else 语句不仅可以处理比较简单的两个分支的情况,还可以通过嵌套来处理多个分支的情况

下面的案例通过if else语句来根据百分制成绩来输出成绩等级

#!/bin/bash
echo "Please enter a score:"
#读取用户输入数据
read score
#如果用户没有输入数据,则提示用户重新输入
if [ -z "$score" ];then
echo "you enter nothing,please enter a score"
read score
else
#如果用户输入的数据不对,则重新输入
if [ "$score" -lt 0 -o "$score" -gt 100 ];then
echo "the score should be between 0 and 100.please enter again:"
read score
else
#输出级别A
if [ "$score" -ge 90 ]; then
echo "the grade is A"
else
#输出级别B
if [ "$score" -ge 80 ];then
echo "the grade is B"
else
#输出级别C
if [ "$score" -ge 70 ];then
echo "the grade is C"
else
#输出级别D
if [ "$score" -ge 60 ];then
echo "the grade is D"
else
#输出级别E
echo "the grade is E"
fi
fi
fi
fi
fi
fi

测试:

输入分数10,得到等级为E

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_if语句_15

输入分数60,得到等级D

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_状态码_16

注意:  shell中的if else结构并没有限制嵌套的层数,用户可以根据自己的情况灵活控控制


使用if elif语句进行多条件判断

简介:

除了if else语句外,shell还提供了一个 if elif语句,通过该语句,用户可以以比较优雅的方式来处理多分支的情况,

语法:

if expression1

then

 statement1

 statement2

elif expression2

then

 statement3

 statement4

elif expression3

then

 statement5

 statement6

else

 statement

fi

流程分析:

如果expression1 表达式为真,则执行第一个then之后的句子,statement1和statement2
否则继续下面的elif判断,如果expression2表达式为真,则执行statement3和statement4
以次类推,如果所有的表达式都为假,则执行else 子句中的语句,最后fi结束

案例:

对上面的案例,根据百分制成绩来输出成绩等级做改进,用 if elif 来代替多层嵌套的 if else语句,从而是的程序的可读性大大加强


Shell 从入门到精通系列 (第三章 条件判断语句上篇)_if语句_17


使用exit语句退出程序

简介:

有时候用户需要在满足某个条件时退出程序的执行,可以通过if语句配合exit来实现

语法:

exit status

status表示退出状态,该参数是一个整数值,取值范围 0-255,可以通过系统变量$?来获取程序的退出状态码

案例1:

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_条件判断_18

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_条件判断_19

案例1:

if 与 exit语句结合,$1是我们要传给脚本的参数,如果文件存在,则打印文件存在,并且退出状态码为1;如果文件不存在,则创建该文件,并且把退出状态码设置为0

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_if语句_20

Shell 从入门到精通系列 (第三章 条件判断语句上篇)_shell开发_21