Shell编程的条件语句使用(if语句和case语句)

一、条件测试操作

test命令

测试表达式是否成立,若成立返回0,否则返回其他数值

格式1:test 条件表达式

格式2:[ 条件表达式 ]

常用的测试操作符

​ -d:测试是否为目录
​ -e:测试目录或文件是否存在
​ -f:测试是否为文件
​ -r:测试当前用户是否有权限读取
​ -w:测试当前用户是否有权限写入
​ -x:测试当前用户是否有权限执行

文件测试

格式一:[ 操作符 文件或目录 ]
格式二:test [ 操作符 ] 文件或目录

常用的测试操作符

​ -d:测试是否为目录
​ -e:测试目录或文件是否存在
​ -f:测试是否为文件
​ -r:测试当前用户是否有权限读取
​ -w:测试当前用户是否有权限写入
​ -x:测试当前用户是否有权限执行

[root@localhost ~]# [ -d /dev/cdrom ]
[root@localhost ~]# echo $?
0                        #返回0表示条件成立
[root@localhost ~]# [ -d /dev/cdrom/Server ]
[root@localhost ~]# echo $?  
1                        #返回1表示条件不成立
[root@localhost ~]# [ -d /dev/cdrom ]&&echo "YES" ===>逻辑与,"而且"的意思
YES

整数值比较

[ 整数1 操作符 整数2 ]

常用的测试操作符
​ -eq:等于(Equal)

​ -ne:不等于(Not Equal)

​ -gt:大于(Greater Than)

​ -lt:小于(Lesser Than)

​ -le:小于或等于(Lesser or Equal)

​ -ge:大于或等于(Greater or equal)

常用的测试操作符
[root@localhost ~]# who | ec -l
6
[root@localhost ~]# [ $(who | wc-l) -gt 5 ]&&echo "Too many."     #用户数是否>5
Too Many.
[root@localhost ~]#  [ $(who | wc-l) -gt 10 ]&&echo ">=10."      #用户数是否 >=10

常用的测试操作符

[root@localhost ~]#  FreeCC=$(free -m | grep "Mem:" | awk '{print $6}')
[root@localhost ~]#  [ $FreeCC -lt 1024 ]&& echo ${FreeCC}MB     ===>空闲内存是否<1024MB
588MB

字符串比较

​ 格式1: [ 字符串1 = 字符串2 ] ​ [ 字符串1 != 字符串2 ]
​ 格式2: [ -z 字符串 ]

常用的测试操作符

​ =:字符串内容相同
​ !=:字符串内容不通,!号表示相反的意思
​ -z:字符串内容为空

[root@localhost ~]#  echo $LANG 
zh_CN.UTF-8
[root@localhost ~]#  [ $LANG != "en.US" ]&&echo "Not en.US"  ===>测试当前语言环境
Not en.US
[root@localhost ~]#  read -p "是否覆盖现有文件 (yes/no)?" ACK
是否覆盖现有文件 (yes/no)? yes
[root@localhost ~]#  [ $ACK = "yes" ]&&echo "覆盖"  ===>测试读入的字符串是否为yes
覆盖

逻辑测试

格式1: [ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2 …

常用的测试操作符

-a或&&:逻辑与,"而且"的意思
-o或||:逻辑或,"或者"的意思
!:逻辑否

[root@localhost ~]# [ -d /etc ] && [ -r /etc ] && echo "You can open it"

[root@localhost ~]#  [ -d /etc ] || [ -d /home ]&&echo "ok"

二、if语句的结构

单分支结构

在这里插入图片描述

if    条件测试操作                       if    已用磁盘空间>80%
    then    命令序列                        then    报警
fi                                     fi

双分支结构

在这里插入图片描述

if    条件测试操作                       if    80端口是否在监听
    then    命令序列1                        then    网站服务已在运行
    else    命令序列2                        else    启动htpd服务
fi                                     fi

多分支结构

在这里插入图片描述

if    条件测试操作1                        if    分数为85~100之间
    then    命令序列1                            then    判为优秀
elif     条件测试操作2                     elif    分数为70~84之间
    then 命令序列2                               then    判为合格
else                                     else
    命令序列3                                    判为不合格
fi                                              fi

三、if语句应用示例

单分支if语句

​ 判断挂载点目录,若不存在则自动创建

[root@locahost ~]# cat chkmountdir.sh
#!/bin/bash
MOUNT_DIR="/dev/cdrom"
if[ ! -d $MOUNT_DIR]       #当目录不存在时执行
    then
    mkdir -p $MOUNT_DIR
fi

双分支if语句

​ 判断目标主机是否存货,显示检测结果

[root@localhost ~]# cat pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null        #"-c"三个测试包 "-i"间隔0.2秒 "-W"超时3秒
if [ $? -eq 0 ]
  then                                          #判断ping命令的检测结果,分别给出不通提示
    echo "Host $1 is up."         
  else
    echo "Host $1 is down."
fi

多分支if语句

​ 判断分数范围,分为优秀,合格,不合格三档

[root@localhost ~]# cat gradediv.sh
#!/bin/bash
read -p "请输入你的分数(0-100):" GRADE
if [ $ake -ge 85 ] && [ $ake -le 100 ]         #判断分数所在区间,给出不同的分档结果
then
    echo "$GRADE分,优秀!"
elif [ $ake -ge 70 ] && [ $ake -le 84 ]
    then
echo "$GRADE分,合格!"
else
  echo "$GRADE分,不合格!"
fi

四、case语句结构

case多分支结构

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

五、case语句应用实例

case多分支语句

[root@localhost ~]# cat hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case $KEY in
[a-z]|[A-Z])            #匹配任意字母
    echo "您输入的时字母."
    ;;
[0-9])                  #匹配任意数字
    echo "您输入的时数字."
    ;;
*)                      #匹配任意字符
    echo "您输入的是空格、功能键或其他控制字符."
esac

小实操

#!/bin/bash
#石头剪刀布小游戏
num=$[$RANDOM%3+1]
#石头=1 剪刀=2 布=3
read -p "请输入您需要出石头,剪刀还是布:" shoushi
echo "你出的是$shoushi"
if [ $shoushi = 石头 ];then
    case $num in
        1)
        echo "电脑出的是石头,平局"
        ;;
        2)
        echo "电脑出的是剪刀,你赢了"
        ;;
        3)
        echo "电脑出的是布,你输了"
    esac
elif [ $shoushi = 剪刀 ];then
    case $num in
        1)
        echo "电脑出的是石头,你输了"
        ;;
        2)
        echo "电脑出的是剪刀,平局"
        ;;
        3)
        echo "电脑出的是布,你赢了"
    esac
elif [ $shoushi =];then
    case $num in
        1)
        echo "电脑出的是石头,你赢了"
        ;;
        2)
        echo "电脑出的是剪刀,你输了"
        ;;
        3)
        echo "电脑出的是布,平局"
    esac  
else echo "输入的信息有误,请输入正确的信息"
fi
#!/bin/bash
#竞速比赛10秒内进入决赛,分为男子组,女子组
read -p "请输入你的百米赛跑成绩:" miao
read -p "请输入你的性别(男or女):" xing
if [ $xing =]
    then
      echo "男子组"
  if [ $miao -ge 0 ]&&[ $miao -le 10 ]
    then
      echo "成绩合格"
    else
      echo "成绩不合格,被淘汰."
  fi
  elif [ $xing =]
    then
      echo "女子组"
  if [ $miao -ge 0 ]&&[ $miao -le 10 ]
    then
      echo "成绩合格"
    else
      echo "成绩不合格,被淘汰."
  fi
  else
      echo "请输入正确的信息"
fi
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题不太清楚是问关于b'shell中的case语句的实例还是关于编写b'shell脚本时使用case语句的实例。如果是前者,可以给出一个示例: #!/bin/bash echo "请输入a或b" read input case $input in a) echo "您输入了a" ;; b) echo "您输入了b" ;; *) echo "输入无效" ;; esac 如果是后者,可以给出一个示例: #!/bin/bash read input case $input in [a-z]) echo "您输入了小写字母" ;; [A-Z]) echo "您输入了大写字母" ;; [0-9]) echo "您输入了数字" ;; *) echo "输入无效" ;; esac ### 回答2: Shell编程中,case语句主要用于根据不同的条件来执行不同的操作。例如,根据用户输入的命令来执行特定的命令,或者根据系统的不同状态来执行不同的操作。下面是一个简单的Shell编程案例,用以说明case语句使用。 #!/bin/bash echo "请输入你的选择:" echo "1: 查看用户登录信息" echo "2: 查看系统版本信息" echo "3: 查看CPU信息" echo "4: 退出程序" read choice case $choice in 1) whoami ;; 2) cat /etc/issue ;; 3) cat /proc/cpuinfo ;; 4) exit 0 ;; *) echo "无效的选择" ;; esac 上面的代码中,首先要求用户输入一个选项,然后根据不同的选项执行不同的命令。例如,如果用户选择“1”,则会执行whoami命令来查看当前登录用户的信息;如果用户选择“2”,则会执行cat /etc/issue命令来查看系统版本信息;如果用户选择“3”,则会执行cat /proc/cpuinfo命令来查看CPU信息;如果用户选择“4”,则会退出程序。如果用户输入的选项不在1到4之间,则会提示“无效的选择”。 可以看到,case语句非常适合用于根据不同的条件来执行不同的操作,可以方便地实现用户交互和系统管理相关的脚本编写。同时,也可以通过case语句的嵌套来实现更复杂的逻辑控制。 ### 回答3: shell编程语言是一种命令行解释器,它允许用户访问操作系统的一些特征和功能,并按照自己的需要编写脚本。在shell编程中,case语句是一种控制流结构,用于尝试匹配一个或多个表达式。 case语句的基本语法如下: ``` case 值 in 模式1) 命令1 ;; 模式2) 命令2 ;; *) 默认命令 ;; esac ``` 在这个语法中,case语句首先尝试将值与多个模式进行匹配,如果找到与某个模式匹配的值,就会执行相应的命令。如果没有找到匹配的模式,则会执行默认命令。 下面是一个简单的case语句实例: ``` #!/bin/bash echo -n "Enter the month (1-12): " read month case $month in 1) echo "January" ;; 2) echo "February" ;; 3) echo "March" ;; 4) echo "April" ;; 5) echo "May" ;; 6) echo "June" ;; 7) echo "July" ;; 8) echo "August" ;; 9) echo "September" ;; 10) echo "October" ;; 11) echo "November" ;; 12) echo "December" ;; *) echo "Invalid month" ;; esac ``` 在这个实例中,用户被要求输入一个1-12之间的数字,然后用case语句将数字转换为相应的月份。如果用户输入的数字不在1-12之间,则执行默认命令,提示无效月份。 在case语句中,模式可以使用通配符来匹配多个表达式。例如,用户可能希望匹配所有以字母“a”开头的单词: ``` case $word in a*) echo "Starts with a" ;; *) echo "Doesn't start with a" ;; esac ``` 在这个实例中,如果$word以字母“a”开头,则输出“Starts with a”,否则输出“Doesn't start with a”。 总之,case语句shell编程中非常有用的控制流结构之一。它可用于匹配多个表达式,并根据匹配结果执行相应的命令。使用case语句shell脚本可以进行更灵活和可读性强的编写。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值