案例3:使用if选择结构

案例3:使用if选择结构

3.1 问题
本案例要求编写3个Shell脚本,分别实现以下目标:
• 检测/media/cdrom目录,若不存在则创建
• 检测并判断指定的主机是否可ping通
• 从键盘读取一个论坛积分,判断论坛用户等级,等级分类如下:
大于等于90 神功绝世
大于等于80,小于90 登峰造极
大于等于70,小于80 炉火纯青
大于等于60,小于70 略有小成
小于60 初学乍练
3.2 方案
if单分支的语法组成:

  1. if 条件测试
  2. then
  3. 命令序列
  4. fi
    if双分支的语法组成:
  5. if 条件测试
  6. then
  7. 命令序列1
  8. else
  9. 命令序列2
  10. fi
    if多分支的语法组成:
  11. if 条件测试1 ;then
  12. 命令序列1
  13. elif 条件测试2 ;then
  14. 命令序列2
  15. else
  16. 命令序列n
  17. fi
    3.3 步骤
    实现此案例需要按照如下步骤进行。
    步骤一:检测/media/cdrom目录,若不存在则创建
    1)编写脚本如下:
  18. [root@svr5 ~]# vim mountdir.sh
  19. #!/bin/bash
  20. dir="/media/cdrom/"
  21. if [ ! -d $dir ]
  22. then
  23.  mkdir -p $dir
    
  24. fi
  25. [root@svr5 ~]# chmod +x mountdir.sh //添加可执行权限
    2)测试、验证脚本功能
  26. [root@svr5 ~]# ls -ld /media/cdrom //本来没有/media/cdrom目录
  27. ls: /media/cdrom: 没有那个文件或目录
  28. [root@svr5 ~]# ./mountdir.sh //执行脚本
  29. [root@svr5 ~]# ls -ld /media/cdrom //再检查已经有了
  30. drwxr-xr-x 2 root root 4096 12-11 15:16 /media/cdrom
    有了/media/cdrom文件夹以后,再次执行上述脚本,实际上不做任何有效操作:
  31. [root@svr5 ~]# ./mountdir.sh
    步骤二:检测并判断指定的主机是否可ping通
    1)分析任务需求
    使用ping命令检测目标主机时,人工可直接判断反馈结果,而脚本却不方便。但是当ping测试成功时,执行状态 ? 的 值 为 0 ; 而 p i n g 测 试 失 败 时 , ?的值为0;而ping测试失败时, ?0ping?的值不为0。因此在Shell脚本中可以利用这一点来判断ping目标主机的成败。
    为了节省ping测试时间,可以只发送3个测试包(-c 3)、缩短发送测试包的间隔秒数(-i 0.2)、等待反馈的超时秒数(-W 1)。比如,检查可ping通的主机:
  32. [root@svr5 ~]# ping -c 3 -i 0.2 -W 1 192.168.4.5
  33. PING 192.168.4.5 (192.168.4.5) 56(84) bytes of data.
  34. 64 bytes from 192.168.4.5: icmp_seq=1 ttl=64 time=0.131 ms
  35. 64 bytes from 192.168.4.5: icmp_seq=2 ttl=64 time=0.076 ms
  36. 64 bytes from 192.168.4.5: icmp_seq=3 ttl=64 time=0.073 ms
  37. — 192.168.4.5 ping statistics —
  38. 3 packets transmitted, 3 received, 0% packet loss, time 402ms
  39. rtt min/avg/max/mdev = 0.073/0.093/0.131/0.027 ms
  40. [root@svr5 ~]# echo $? //执行状态表示成功
  41. 0
    2)脚本编写参考如下:
  42. [root@svr5 ~]# vim pinghost.sh
  43. #!/bin/bash
  44. ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
  45. if [ $? -eq 0 ] ; then
  46.  echo "Host $1 is up."
    
  47. else
  48.  echo "Host $1 is down."
    
  49. fi
  50. [root@svr5 ~]# chmod +x pinghost.sh
    3)测试、验证脚本功能
  51. [root@svr5 ~]# ./pinghost.sh 192.168.4.5
  52. Host 192.168.4.5 is up.
  53. [root@svr5 ~]# ./pinghost.sh 192.168.4.50
  54. Host 192.168.4.50 is down.
    步骤三:从键盘读取一个论坛积分,判断论坛用户等级
    1)脚本编写参考如下:
    大于等于90 神功绝世
    大于等于80,小于90 登峰造极
    大于等于70,小于80 炉火纯青
    大于等于60,小于70 略有小成
    小于60 初学乍练
  55. [root@svr5 ~]# vim grade.sh
  56. #!/bin/bash
  57. read -p “请输入积分(0-100):” JF
  58. if [ $JF -ge 90 ] ; then
  59.  echo "$JF 分,神功绝世"
    
  60. elif [ $JF -ge 80 ] ; then
  61.  echo "$JF 分,登峰造极"
    
  62. elif [ $JF -ge 70 ] ; then
  63.  echo "$JF 分,炉火纯青"
    
  64. elif [ $JF -ge 60 ] ; then
  65. echo "$JF 分,略有小成"
    
  66. else
  67. echo "$JF 分,初学乍练"
    
  68. fi
  69. [root@svr5 ~]# chmod +x grade.sh
    3)测试、验证脚本
  70. [root@svr5 ~]# ./grade.sh
  71. 请输入积分(0-100):74
  72. 74 分,炉火纯青
  73. [root@svr5 ~]# ./grade.sh
  74. 请输入分数(0-100):68
  75. 68 分,略有小成
  76. [root@svr5 ~]# ./grade.sh
  77. 请输入分数(0-100):87
  78. 87 分,登峰造极

--------------作者说明:个人整理,如有雷同,纯属偶然,请原谅!--------------------

猜你喜欢

转载自blog.csdn.net/weixin_49307896/article/details/107581234