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