shell 之 case语句

case语句

case语句是点名语句,每个分支语句之间是平衡的,在进行判定时,每个分支语句之判定一次,适合于字符匹配。
if else 语句适合在判断时用,if语句每个分支语句之间是有优先级的,在进行判定时,每个语句都要判定一次。
case语句和if语句相比,判定次数少。

  • 示例 1
[root@fuwu test]# cat case.sh 
#!/bin/bash
case $1 in
student|limin|westos)
     echo "Welcome,$1"
     ;;
*)
     echo "Sorry!"
     ;;
esac
[root@fuwu test]# sh case.sh 
Sorry!
[root@fuwu test]# sh case.sh limin
Welcome,limin
[root@fuwu test]# sh case.sh aa
Sorry!
  • 示例 2 :交互式例子1
[root@fuwu test]# cat jiaohu.sh 
#!/bin/bash
while true
do
    echo -e "
    \033[31m A 显示主机IP \033[0m
    \033[32m B 显示磁盘剩余空间 \033[0m
    \033[33m C 显示系统运行时间 \033[0m
    \033[34m Q 退出系统 \033[0m
"
read -p "请输入你的选择:" char

case $char in

a|A)
   ifconfig eth0 | grep "inet " | awk '{print $2}'
    ;;

b|B)
    df -h | awk 'NR==2{print "剩余空间大小为:"$4}'
    ;;

c|C)
    uptime |awk '{print $3}' | awk -F, '{print $1}' | awk -F: '{print "系统已经运行了"$1"小时"$2"分钟"}'
    ;;

q|Q)
    exit 0
    ;;

esac
done

在这里插入图片描述

  • 例3:交互式例子2
#!/bin/bash
while true
do
echo "Please input action:
          C:create user
          D:delete user 
          E:exit
        "
Action_cmd(){
read -p "Your action:" char
case $char in
C|c)
Create_cmd(){
        read -p "Please input username:" username
        #read -p "Please input passwd" -s passwd
        id $username &> /dev/null &&{
            echo "$username is exist"
                Create_cmd
        }||{
        useradd "$username"
        read -p "Please input passwd:" -s passwd
        echo $passwd | passwd --stdin $username &> /dev/null
        echo ""
        echo  "$username is created!"
        }
}
Create_cmd
;;
D|d)

Delete_cmd(){
        read -p "Please input you want delete username:" user
        id $user &> /dev/null &&{
        userdel -r $user
        echo "$user delete successuful!!"
        }||{
        echo "$user not exist!"
        Delete_cmd
        }
}
Delete_cmd
;;
E|e)
echo "bye~"
exit 0
;;
*)
echo "Please input true action!!!"
Action_cmd
;;
esac
}
Action_cmd
done

结果图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: case语句是一种在shell脚本中用于多条件判断的结构。它类似于switch语句,在不同的条件下执行不同的操作。case语句的语法如下: ``` case 变量 in 模式1) 命令1 ;; 模式2) 命令2 ;; *) 默认命令 ;; esac ``` 其中,变量是需要判断的变量,模式是用于匹配变量的模式,命令是在匹配成功时执行的命令。默认命令是在所有模式都不匹配时执行的命令。 模式可以使用通配符,如*表示匹配任意字符,?表示匹配任意单个字符,[...]表示匹配括号中的任意一个字符。 case语句可以嵌套使用,也可以与if语句结合使用,以实现更复杂的逻辑判断。 ### 回答2: shellcase语句是一种用于匹配多个模式的条件语句。它类似于switch语句,在不同的模式下执行相应的代码块。case语句的语法如下: ```shell case 变量 in 模式1) 执行代码块1 ;; 模式2) 执行代码块2 ;; 模式3|模式4) 执行代码块3 ;; *) 默认执行代码块 ;; esac ``` case语句首先会将变量和每个模式进行匹配,如果匹配成功,则执行相应的代码块。一个模式可以是一个单词、一个字符串、一个字符范围或一个正则表达式。模式后面跟着圆括号,并使用两个分号(;;)来表示代码块的结束。 在匹配模式时,可以使用竖杠(|)来表示或逻辑关系,即匹配多个模式时执行同一个代码块。如果没有任何模式与变量匹配成功,则会执行默认的代码块。默认代码块用星号(*)表示,相当于switch语句中的default。 使用case语句可以根据不同的条件执行不同的代码块,这样可以提高脚本的灵活性和可读性。它常用于根据用户输入做出相应的操作,或者根据不同的文件类型执行不同的命令等等。 例如,以下是一个简单的case语句示例,用于检查用户输入的数字是否是1或2: ```shell read -p "请输入一个数字:" num case $num in 1) echo "你输入了1" ;; 2) echo "你输入了2" ;; *) echo "输入无效" ;; esac ``` 以上就是关于shellcase语句的简单介绍。它是一种功能强大的条件语句,可以根据不同的模式执行不同的代码块,增加了脚本的灵活性和可读性。 ### 回答3: Shell中的case语句是一种多分支判断结构,用于根据不同的条件执行不同的代码块。它类似于其他编程语言中的switch语句case语句的基本语法如下: ``` case 变量 in 模式1) 命令1 ;; 模式2) 命令2 ;; *) 默认命令 ;; esac ``` 在case语句中,变量将与每个模式进行匹配,一旦找到匹配的模式,对应的代码块将被执行。模式可以是一个常量,也可以是一个通配符。 在执行case语句时,从上至下依次匹配每个模式。如果变量与某个模式匹配成功,则执行对应模式下的命令块,并使用双分号(`;;`)表示结束。如果没有匹配成功,则执行默认命令块,使用星号(`*`)来表示。最后使用`esac`表示case语句的结束。 case语句可以嵌套使用,以提供更复杂的判断逻辑。它还支持正则表达式匹配,在模式部分使用`*`、`?`等通配符来进行模糊匹配。 使用case语句可以简化复杂的多重if-else语句,提高脚本的可读性和可维护性。它常用于处理用户输入、参数判断和进行不同分支的处理。 总之,Shell中的case语句是一种灵活的多分支判断结构,能够根据变量的不同值执行对应的代码块,使得Shell脚本更加灵活和可读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值