条件判断语句
- 简介
条件判断语句是一种最简单的流程控制语句,该语句使得程序根据不同的条件来执行不同的程序分支。
使用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是不是一个常规文件
案例2:
判断文件是否创建成功
注意: 条件测试可以用test命令,也可以用方括号[]
案例3:
使用空命令作为判断条件,空命令用一个冒号表示 ":", 不做任何事情,但它的退出状态码永远是0,所以条件判断的结果永远为true
案例4:
使用&& 操作符代替if语句, 判断当前用户是否是root,如果不是root,则打印&&后面的语句,并且exit显式退出
由于当前用户是root,所以没有任何输出
切换用户
注意: 在使用if语句的时候,一定不要忘记最后的fi结束标志,否则会报以下错误
使用if else语句进行流程控制
简介:
比如上面我们又一个案例是判断一个文件是否创建成功,当创建成功的时候会打印一行信息,但是创建不成功则没有任何输出,这样对用户不太友好,所以我们要在文件创建不成功的时候也要给用户一个提示。
语法:
if expression
then
statement1
statement2
else
statement3
statement4
fi
流程分析:
当expression 为真时, 执行then后面的语句,否则执行else 后面的语句,最后以fi结束 语句块
案例1:
提示用户输入两个数字,如果数字大于10则输出大于10的消息,否则输出小于等于10的消息
输入10:
输入20:
案例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
输入分数60,得到等级D
注意: 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语句,从而是的程序的可读性大大加强
使用exit语句退出程序
简介:
有时候用户需要在满足某个条件时退出程序的执行,可以通过if语句配合exit来实现
语法:
exit status
status表示退出状态,该参数是一个整数值,取值范围 0-255,可以通过系统变量$?来获取程序的退出状态码
案例1:
案例1:
if 与 exit语句结合,$1是我们要传给脚本的参数,如果文件存在,则打印文件存在,并且退出状态码为1;如果文件不存在,则创建该文件,并且把退出状态码设置为0