Shell编程之条件语句(三)——if语句、case语句

一、if语句

通过我上一篇文章条件测试操作,实际上使用“&&”和“||”逻辑测试已经可以完成简单的判断并执行相应的操作,但是当需要选择执行的命令语句家偶偶是,这种方式将使执行代码显得很复杂,不好理解。而使用专门的if条件语句,可以更好的整理脚本结构,使得层次分明,清晰易懂

1、单分支的if语句

固定结构

if 条件测试操作
then 命令序列
fi
或者
if 条件测试操作;then
命令序列
fi

注意点

  • if和fi是必须成对出现,表示开始和结束
  • then如果连接if语句,需要“;”
    实例
    挂载到mnt目录下,并把过程扔进垃圾箱
    在这里插入图片描述
    或者then可以和if写在一行,中间加上分号
    在这里插入图片描述

2、双分支的if语句

在单分支的基础上针对“条件不成立”的情况下执行另一种操作,使用else
固定结构

if 条件测试操作
then 命令序列
else
fi

实例
判断以.sh结尾的脚本是一个shell脚本

read -p "请输入文件名: " file
if [[ $file == *.sh ]];then
        echo "它是一个shell脚本"
else
        echo "它不是一个shell脚本"
fi

在这里插入图片描述

3、多分支的if语句

固定结构

if 条件测试1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi

实例
判断成绩,85-100是优秀,70-85是良好,60-70及格,60以下不及格

#!/bin/bash
read -p "请输入分数:" s
if [ $s -lt 0 -o $s -gt 100 ];then
        echo "超出范围无法判定"
elif [ $s -ge 85 -a $s -le 100 ];then
        echo "优秀"
elif [ $s -ge 70 -a $s -lt 85 ];then
        echo "良好"
elif [ $s -ge 60 -a $s -lt 70 ];then
        echo "及格"
else
        echo “不及格”
fi

验证
在这里插入图片描述

[ abc == abc ]   ##在一个方括号"[ ]“内,双等号“==”是精确匹配
[[ abc == abc* ]] ##双括号可以使用&&和||做逻辑判断;可以搭配通配符来判断

实例
判断系统用户是否有家目录,若无家目录就删除用户

read -p "请输入用户名:" user
if grep $user /etc/passwd &> /dev/null;then
        if [ -d /home/$user ];then
        echo "该用户状态正常"
        else
                read -p "该用户没有家目录,是否删除该用户,请输入[yes/no]:" s
                        if [ $s == yes ];then
                        echo "正在删除用户..."
                        userdel $user &> /dev/null;sleep 2
                        echo "该用户已删除"
                        elif [ $s == no ];then
                        exit
                        fi
        fi
fi

验证
在这里插入图片描述

4、练习题

  • 判断目标主机是否存活,存活就打印is up,如果不存活就打印is down

vim ip.sh

#!/bin/bash
read -p "请输入ip:" ip
ping -c 3 $ip &> /dev/null
if [ $? -eq 0 ];then
        echo "$ip is up"
else
        echo "$ip is down"
fi

验证
在这里插入图片描述

  • 判断当前登陆用户是否是管理员
    vim user3.sh
#!/bin/bash
#判断当前登录用户是否是管理员
#!/bin/bash
read -p "请输入用户名:" user
id $user &> /dev/null
if [ $? -eq 0 ]
        then
                echo "是管理员"
else
                echo "不是管理员"
fi

验证
在这里插入图片描述

  • 判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码
    vim user2.sh
#!/bin/bash
read -p "请输入用户名:" user
cat /etc/passwd | grep -q $user
if [ $? -eq 0 ]
        then
                echo "用户已存在"
        else
read -p "请创建新的用户名:" user
read -p "请输入密码:" pass
useradd $user
echo "$pass" | passwd --stdin $user
fi

验证
在这里插入图片描述

  • 剪刀石头布人机对战
    vim r.sh
echo -e "\e[35m人机对战开始\e[0m"
read -p "剪刀:0 石头:1 步:2  请出拳(选择数字0-2): " num
com=`expr $RANDOM % 3`
case $num in
[0])
        if [ $com -eq 0 ];then
                echo "平局"
                elif [  $com -eq 2 ];then
                        echo "你输了"
                elif [  $com -eq 1 ];then
                        echo "你赢了"
        fi
;;
[1])
        if [ $com -eq 0 ];then
                echo "你赢了"
                elif [  $com -eq 2 ];then
                        echo "平局"
                elif [  $com -eq 1 ];then
                        echo "你输了"

        fi
;;
[2])
        if [ $com -eq 0 ];then
                echo "你输了"
                elif [  $com -eq 2 ];then
                        echo "你赢了"
                elif [  $com -eq 1 ];then
                        echo "平局"
        fi
;;
esac

验证
在这里插入图片描述

二、case语句

1、语句结构

case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
...
*)
默认命令序列
esac

使用case分支语句时,有以下注意点

  • case行尾必须为单词“in”,每一模式必须以右括号“)”结束
  • 双分号“;;”表示命令序列的结束
  • 模式字符串中,可以用方括号报送一个联系的范围,如[0-9];还可以用竖杠符号“|”表示或,如“A|B”
  • 最后的“)”表示默认模式,其中的相当于通配符
    在这里插入图片描述

2、实例

  • 判断一个字符是大小写字母、数字、还是特殊字符
    vim zi.sh
#!/bin/bash
read -p "请输入一个字符:" a
case $a in
[a-z])
echo "小写字母";;
[A-Z])
echo "大写字母";;
[0-9])
echo "数字";;
*)
echo "特殊字符";;
esac

验证
在这里插入图片描述

验证时发现错误,字符集的问题导致系统无法区分大小写,把系统的变量LANG改成C语言

export LC_ALL=C

再次验证正确
在这里插入图片描述

  • 输入一个月份,判断是一年中的第几季度
    vim yue.sh
#!/bin/bash
read -p "请输入月份[数字1-12]:" m
case $m in
[1-3])
echo "第一季度";;
[4-6])
echo "第二季度";;
[7-9])
echo "第三季度";;
[10-12])
echo "第四季度";;
*)
echo "输入错误";;
esac

验证
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值