shell之if条件语句case语句

实际上使用“&&”和“||”逻辑测试已经可以完成简单的判断并执行相应的操作,但是当需要选择执行的命令语句较多时,这种方式将使执行代码显得很复杂,不好理解。而使用专用的 if 条件语句,可以更好地整理脚本结构,使得层次分明,清晰易懂。
单分支 if 语句:对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。

语法格式:  单分支
if 条件测试操作 
then
命令序列 
fi    #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误

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

执行流程:
首先判断条件测试操作的结果,如果返回值为 0,表示条件成立,执行 then 后面的命令序列,一直到遇见 fi 结束判断为止,继续执行其他脚本代码; 
如果返回值不为 0,则忽略 then 后面的命令序列,直接跳至 fi 行以后执行其他脚本代码
一个简单的if单分支判断shell脚本

 解读一下这个脚本  read -p 交互选择你要进入四家店铺其中一家  1或者2或者3或者4

然后定义四个变量 abcd

然后if判断 [] 中括号里面也代表判断 $a你选择的变量 -eq 等于几 ; then

或者换行直接then不用写分号 最后fi判断结束 意思就是如果判断的条件成立 就执行下面的命令再结束 不成立就直接结束   下面我们来看这个脚本的执行结果 

 sh 执行脚本 交互选择 判断 最后fi结束

典型案例:
判断挂载点,如果不存在就自动创建
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
    mkdir -p $MOUNT_DIR
fi

双分支 if 语句
双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作

多分支if语句
与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作
典型案例:判断学习成绩区间


一个if多分支判断的shell脚本 :猜数字游戏

 解读一些这个脚本

首先定义一个变量 $RANDOM % 100 从0-100中随机抽取一个随机数 

echo 输入你猜的数字 while 判断为真的情况下 进入if判断 

read -p 交互输入你选的数字 如果是随机选到的那个数字 那么炸弹就炸了 如果不是就根据[]判断 最后fi结束if判断 done结束while循环 

 看执行结果

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

fi

这个脚本是if多分支判断用户是否存在 存在有没有家目录 没有是否要删除

case语句
case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值

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

case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。  双分号“;;”表示命令序列的结束。  模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号 “|”表示或,如“A|B”。  最后的“*)”表示默认模式,其中的*相当于通配符。
case 语句的执行流程:首先使用“变量值”与模式 1 进行比较,若取值相同则执行模式 1 后的命令序列,直到遇见双分号“;;”后跳转至 esac,表示结束分支;若与模式 1 不相匹配, 则继续与模式 2 进行比较,若取值相同则执行模式 2 后的命令序列,直到遇见双分号“;;”后 跳转至 esac,表示结束分支……依此类推,若找不到任何匹配的值,则执行默认模式“*)” 后的命令序列,直到遇见 esac 后结束分支。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值