Shell中的条件判断语句if~then~fi

 

 

    Shell中的条件判断语句是前面一篇“Shell中的条件测试语句”的升级篇,也就是说,前面的测试语句是为了现在的判断语句if~then~fi语句服务的。

    我们还是按照注意点和代码实现的方式铺开:

    

    1)基本的if-then-fi语句可以用来判断基本的单层的分支结构,其形式如下:

其中if后面的测试语句一般都使用[]命令来做。如下面的例子:

 

 
  1. <span style="font-size:14px;">#-----------------------------/chapter4/ex4-18.sh------------------

  2. #! /bin/sh

  3. #使用条件测试判断/bin/bash是否是一个常规文件

  4. if [ -f /bin/bash ]; then

  5. echo "/bin/bash is a file"

  6. fi

  7. </span>


    2)if-then-else-fi语句可以处理两层的分支判断语句。如下:

 

 

 
  1. <span style="font-size:14px;">#-----------------------------/chapter4/ex4-22.sh------------------

  2. #! /bin/sh

  3.  
  4. #输出提示信息

  5. echo "Please enter a number:"

  6. #从键盘读取用户输入的数字

  7. read num

  8. #如果用户输入的数字大于10

  9. if [ "$num" -gt 10 ]; then

  10. #输出大于10的提示信息

  11. echo "The number is greater than 10."

  12. #否则

  13. else

  14. #输出小于或者等于10的提示信息

  15. echo "The number is equal to or less than 10."

  16. fi

  17. </span>

 

 

    3)if-then-elif-then-elif-then-...-else-fi。这种语句可以实现多重判断,注意最后一定要以一个else结尾。如下:

 

 
  1. <span style="font-size:14px;">#-----------------------------/chapter4/ex4-24.sh------------------

  2. #! /bin/sh

  3.  
  4. echo "Please enter a score:"

  5.  
  6. read score

  7.  
  8. if [ -z "$score" ]; then

  9. echo "You enter nothing.Please enter a score:"

  10. read score

  11. else

  12. if [ "$score" -lt 0 -o "$score" -gt 100 ]; then

  13. echo "The score should be between 0 and 100.Please enter again:"

  14. read score

  15. else

  16. #如果成绩大于90

  17. if [ "$score" -ge 90 ]; then

  18. echo "The grade is A."

  19. #如果成绩大于80且小于90

  20. elif [ "$score" -ge 80 ]; then

  21. echo "The grade is B."

  22. #如果成绩大于70且小于80

  23. elif [ "$score" -ge 70 ]; then

  24. echo "The grade is C."

  25. #如果成绩大于60且小于70

  26. elif [ "$score" -ge 60 ]; then

  27. echo "The grade is D."

  28. #如果成绩小于60

  29. else

  30. echo "The grade is E."

  31. fi

  32. fi

  33. fi

  34. </span>


    4)要退出程序的时候,可以使用exit status语句。退出的状态status为0的时候,意味着脚本成功运行结束;非0表示程序执行过程出现某些错误,不同的错误对应着不同的退出状态。尽管用户可以自定义程序中的退出状态status,但是通常情况下每个status都有特定的含义,因此在自定义返回status的时候,一定要避免造成歧义。例子如下:

 

 

 
  1. <span style="font-size:14px;">01 #-----------------------------/chapter4/ex4-26.sh------------------

  2. 02 #! /bin/sh

  3. 03

  4. 04 #如果文件已经存在,则直接退出,文件名时输入的第一个参数

  5. 05 if [ -e "$1" ]

  6. 06 then

  7. 07 echo "file $1 exists."

  8. 08 exit 1

  9. 09 #如果文件不存在,则创建文件,使用touch来创建文件,也可以使用重定向来创建文件echo "Hello~" > ./test.log 即在当前目录下新建一个test.log文件

  10. 10 else

  11. 11 touch "$1"

  12. 12 echo "file $1 has been created."

  13. 13 exit 0

  14. 14 fi

  15. </span>


    5)case-esac语句实现多重条件判断。如下:

 

    注意:每一个变量内容的程序段最后都需要两个分号 (;;) 来代表该程序段落的结束;每个变量情况最后都要有)结尾;其余情况用*)来表示;最后要用esac来结束,即case反过来。

 

 
  1. <span style="font-size:14px;">#-----------------------------/chapter4/ex4-27.sh------------------

  2. #! /bin/sh

  3.  
  4. #输出提示信息

  5. echo "Hit a key,then hit return."

  6. #读取用户按下的键

  7. read keypress

  8. #case语句开始

  9. case "$keypress" in

  10. #小写字母

  11. [[:lower:]])

  12. echo "Lowercase letter.";;

  13. #大写字母

  14. [[:upper:]])

  15. echo "Uppercase letter.";;

  16. #单个数字

  17. [0-9])

  18. echo "Digit.";;

  19. #其他字符

  20. *)

  21. echo "other letter.";;

  22. esac

  23. </span>

 

 

    参考:

    《鸟哥的Linux私房菜》

    《Shell从入门到精通》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值