Shell使用if选择结构

本文详细介绍了Shell脚本中if选择结构的三种形式:单分支、双分支和多分支,并提供了三个实际案例。包括检测/media/cdrom目录的创建、判断主机是否可ping通以及根据输入积分判断论坛用户等级。每个案例都包含脚本编写、测试验证的步骤,帮助读者深入理解if条件语句在Shell脚本中的应用。

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;而ping测试失败时,?的值为0;而ping测试失败时,?0ping?的值不为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 分,登峰造极

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值