14.2.3 if/elif/else判断结构

不论是if结构的单向选择,还是if/else结构的双向选择,实际上都不能满足需要,现实中的判断往往有多种可能,在这种情况下可以通过if/else的语法嵌套完成多向选择。其结构如下所示:


  1. if expression1; then

  2. command1

  3. else

  4. if expression2; then

  5. command2

  6. else

  7. command3

  8. fi

  9. fi


使用这种嵌套的方式可以增加更多的选择分支,虽然从语法上来说毫无错误,但使用这种方式进入多层嵌套后,代码的可读性会变得越来越差。下面使用if/else多层嵌套的方式将14.2.1小节中的演示代码改写成下面的格式:


  1. [root@localhost ~]# cat score02.sh

  2. #!/bin/bash

  3. echo -n "Please input a score:"

  4. read SCORE

  5. if [ "$SCORE" -lt 60 ]; then

  6. echo "C"

  7. else

  8. if [ "$SCORE" -lt 80 -a "$SCORE" -ge 60 ]; then #

  9. 第二层嵌套

  10. echo "B"

  11. else

  12. if [ "$SCORE" -ge 80 ]; then #

  13. 第三层嵌套

  14. echo "A"

  15. fi

  16. fi

  17. fi


注意看改写后的结构,这里实现了3层嵌套。如果再进入更多的嵌套,相信读者会看得更加头痛。鉴于这种原因,并不建议使用if/else进行多层嵌套,而是使用if/elif/else结构,其语法结构如下:


  1. if expression1; then

  2. command1

  3. elif expression2; then

  4. Command2

  5. elif expression3; then

  6. Command3

  7. ...

  8. fi


这种结构可根据多种情况进行处理,而且看起来结构非常清晰。

下面使用if/elif/else结构来改写14.2.1小节中的示例代码,如下所示:


  1. [root@localhost ~]# cat score03.sh

  2. #!/bin/bash

  3. echo -n "Please input a score:"

  4. read SCORE

  5. if [ "$SCORE" -lt 60 ]; then

  6. echo "C"

  7. elif [ "$SCORE" -lt 80 -a "$SCORE" -ge 60 ]; then

  8. echo "B"

  9. else

  10. echo "A"

  11. fi