14.2.3 if/elif/else判断结构
不论是if结构的单向选择,还是if/else结构的双向选择,实际上都不能满足需要,现实中的判断往往有多种可能,在这种情况下可以通过if/else的语法嵌套完成多向选择。其结构如下所示:
- if expression1; then
command1
else
if expression2; then
command2
else
command3
fi
fi
使用这种嵌套的方式可以增加更多的选择分支,虽然从语法上来说毫无错误,但使用这种方式进入多层嵌套后,代码的可读性会变得越来越差。下面使用if/else多层嵌套的方式将14.2.1小节中的演示代码改写成下面的格式:
- [root@localhost ~]# cat score02.sh
#!/bin/bash
echo -n "Please input a score:"
read SCORE
if [ "$SCORE" -lt 60 ]; then
echo "C"
else
if [ "$SCORE" -lt 80 -a "$SCORE" -ge 60 ]; then #
第二层嵌套
echo "B"
else
if [ "$SCORE" -ge 80 ]; then #
第三层嵌套
echo "A"
fi
fi
fi
注意看改写后的结构,这里实现了3层嵌套。如果再进入更多的嵌套,相信读者会看得更加头痛。鉴于这种原因,并不建议使用if/else进行多层嵌套,而是使用if/elif/else结构,其语法结构如下:
- if expression1; then
command1
elif expression2; then
Command2
elif expression3; then
Command3
...
fi
这种结构可根据多种情况进行处理,而且看起来结构非常清晰。
下面使用if/elif/else结构来改写14.2.1小节中的示例代码,如下所示:
- [root@localhost ~]# cat score03.sh
#!/bin/bash
echo -n "Please input a score:"
read SCORE
if [ "$SCORE" -lt 60 ]; then
echo "C"
elif [ "$SCORE" -lt 80 -a "$SCORE" -ge 60 ]; then
echo "B"
else
echo "A"
fi