news 2026/6/23 16:53:09

case 条件语句基础与应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
case 条件语句基础与应用

case 条件语句的应用实践

文章目录

  • case 条件语句的应用实践
    • 1 case 条件语句的语法
    • 2 case 条件语句实践
    • 3 实践:给输出的字符串加颜色
    • 4 case 语句企业级生产案例
      • 示例1:控制sshd服务
      • 示例2:管理用户
    • 5 case 条件语句的 Linux 系统脚本范例
    • 6 本章小结

case 条件语句相当于多分支的if/elif/else条件语句,但是它比这些条件语句看起来更规范更工整,常被应用于实现系统服务启动脚本等企业应用场景中。

在case语句中,程序会将case获取的变量的值与表达式部分的值1、值2、值3等逐个进行比较:

  • 如果获取的变量值和某个值(例如值1)相匹配,就会执行值(例如值1)后面对应的指令(例如指令1,其可能是一组指令),直到执行到双分号(;;)才停止,然后再跳出case语句主体,执行case语句(即esac字符)后面的其他命令。
  • 如果没有找到匹配变量的任何值,则执行“*)”后面的指令(通常是给使用者的使用提示),直到遇到双分号(此处的双分号可以省略)或esac结束,这部分相当于if多分支语句中最后的else语句部分。
  • 另外,case语句中表达式对应值的部分,还可以使用管道等更多功能来匹配。

1 case 条件语句的语法

case 条件语句的语法格式为:

case"变量值"in值1)指令1...;;值2)指令2...;;*)指令3...;;esac

为了便于大家记忆,下面是某女生写的case 条件语句的中文形象描述:

case"找老公条件"in资产大于1千万) 嫁给你;;资产介于1百万和1千万之间) 再考虑以下;;资产小于1百万) 再见;;其他情况) 视情况而定;;esac

case 条件语句的执行流程逻辑图如下:

2 case 条件语句实践

示例:判断用户输入的数字是否是1、2、3。

[laoma@shell ~]$catcase1.sh#!/bin/bashread-p"请输入一个1-3之间数字:"numcase$numin1)echo"您输入的数字是:$num";;2)echo"您输入的数字是:$num";;3)echo"您输入的数字是:$num";;*)echo"请输入一个1-3之间数字。";;esac# 执行验证[laoma@shell ~]$bashcase1.sh 请输入一个1-3之间数字:1 您输入的数字是:1[laoma@shell ~]$bashcase1.sh 请输入一个1-3之间数字:4 请输入一个1-3之间数字。

3 实践:给输出的字符串加颜色

[laoma@shell ~]$catcase2.sh#!/bin/bashcase$1inPASS)echo-e'\033[1;32mPASS\033[0;39m';;FAIL)echo-e'\033[1;31mFAIL\033[0;39m';;DONE)echo-e'\033[1;35mDONE\033[0;39m';;*)echo"Usage:$0PASS|FAIL|DONE";;esac

执行效果:

4 case 语句企业级生产案例

示例1:控制sshd服务

#!/bin/bashcase$1instart)systemctl start sshd;;stop)systemctl stop sshd;;restart|reload)systemctl restart sshd;;status)systemctl status sshd;;*)echo"Usage: case-ssh start|stop|restart|reload|status";;esac

简化版:

#!/bin/bashcase$1instart|stop|restart|reload|status)systemctl$1sshd;;*)echo"Usage: case-ssh start|stop|restart|reload|status";;esac

示例2:管理用户

通过传参的方式往 /etc/users 里添加用户,具体要求如下。

  1. 命令用法为:

    Usage: user-mgr [ [-add|-a ] | [ -d|-del ] | [ -s|-search ] ] username

  2. 传参要求为:

    • 参数为-add|-a时,表示添加后面接的用户名。如果有同名的用户, 则不能添加。
    • 参数为-del|-d时,表示删除后面接的用户名。如果用户不存在,提示用户不存在。
    • 参数为-search|-s时,表示查找后面接的用户名。 如果用户不存在,提示用户不存在。
    • 没有用户时应给出明确提示。
  3. /etc/users 保存用户清单,格式如下:

    username: laoma username: laowang
  4. /etc/users 不能被外部其他程序直接删除及修改。

参考答案:

答案1:

#!/bin/bash# run as root[$UID-ne0]&&echo'Please run as root'&&exit1# create users fileusers_info_file=/etc/users[-f${users_info_file}]||touch${users_info_file}# provides two argsif[$#-ne2];thenecho"Usage: user-mgr [ [-add|-a ] | [ -d|-del ] | [ -s|-search ] ] username"exit2fi# get arg valueaction=$1username=$2# manager usercase$actionin-s|-search)ifgrep-q"username:$username"${users_info_file};thenecho"$usernameis exist."elseecho"$usernameis not exist."fi;;-a|-add)ifgrep-q"username:$username"${users_info_file};thenecho"$usernameis exist."elsechattr -i${users_info_file}echo"username:$username">>${users_info_file}echo"$usernamehas been added."chattr +i${users_info_file}fi;;-d|-del)ifgrep-q"username:$username"${users_info_file};thenchattr -i${users_info_file}sed-i"/username:$username/d"${users_info_file}chattr +i${users_info_file}echo"$usernamehas been deleted."elseecho"$usernameis not exist."fi;;*)echo"Usage: user-mgr [ [-add|-a ] | [ -d|-del ] | [ -s|-search ] ] username";;esac

答案2:

#!/bin/bash# run as root[$UID-ne0]&&echo'Please run as root'&&exit1# create users fileusers_info_file=/etc/users[-f${users_info_file}]||touch${users_info_file}functionusage(){echo"Usage: user-mgr [ [-add|-a ] | [ -d|-del ] | [ -s|-search ] ] username"exit2}functionsearch_user(){ifgrep-q$1${users_info_file};thenecho$1is existreturn0elseecho$1is not existreturn1fi}functionadd_user(){search_user$1&>/dev/nullif[$?-eq0];thenecho$1is already existelsechattr -i${users_info_file}echo"username:$1">>${users_info_file}&&echoAdd User Success. chattr +i${users_info_file}fi}functiondel_user(){search_user$1&>/dev/nullif[$?-eq1];thenecho$1is not existelsechattr -i${users_info_file}sed-i"/.*$1/d"${users_info_file}&&echoDel User Success. chattr +i${users_info_file}fi}[$#-ne2]&&usagecase$1in-a|-add)shiftadd_user$1;;-d|-del)shiftdel_user$1;;-s|-search)shiftsearch_user$1;;*)usage;;esac

执行验证:

[root@shell laoma]# cat /etc/users# 查找用户[root@shell laoma]# bash user-mgr -s laomalaoma is not exist# 添加用户[root@shell laoma]# bash user-mgr -a laomaAdd User Success.[root@shell laoma]# bash user-mgr -s laomalaoma is exist[root@shell laoma]# cat /etc/usersusername: laoma# 再次添加用户[root@shell laoma]# bash user-mgr -a laomalaoma is already exist# 删除用户[root@shell laoma]# bash user-mgr -d laomaDel User Success.# 再次删除用户[root@shell laoma]# bash user-mgr -d laomalaoma is not exist[root@shell laoma]# cat /etc/users# 其他测试:多个参数[root@shell laoma]# bash user-mgr a b c# 其他测试:普通用户执行[laoma@shell ~]$bashuser-mgr Please run as root

5 case 条件语句的 Linux 系统脚本范例

/etc/init.d/network

提示:network-scripts 软件包提供以上脚本。

6 本章小结

  1. case 语句比较适合变量值较少且为固定的数字或字符串集合的情况,如果变量的值是已知固定的start/stop/restart 等元素,那么采用case语句来实现就比较适合。
  2. case语句和if条件语句的常见应用场景
    • case主要是写服务的启动脚本,一般情况下,传参不同且具有少量的字符串,其适用范围较窄。
    • if就是取值判断、比较,应用面比case更广。几乎所有的case语句都可以用if条件语句来实现。
  3. case语句就相当于多分支的if/elif/else语句,但是case语句的优势是更规范、易读。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:38:43

while 循环和 until 循环的应用

while 循环和 until 循环的应用实践 文章目录while 循环和 until 循环的应用实践1 当型和直到型循环语法1.1 while 循环语句1.2 until 循环语句2 当型和直到型循环的基本范例3 让 Shell 脚本在后台运行的知识并发控制wait 指令4 企业生产实战:while 循环语句实践5 w…

作者头像 李华
网站建设 2026/6/23 6:14:18

FOR 和 SELECT 循环语句应用

FOR 和 SELECT 循环语句的应用实践 文章目录FOR 和 SELECT 循环语句的应用实践1 for 循环语法结构1.1 变量取值型1.2 C 语言型2 for 循环语句的基础实践示例1:竖向升序打印示例2:竖向降序打印示例3:求和、求乘积示例4:求水仙花数示…

作者头像 李华
网站建设 2026/6/22 22:53:23

基于 Electron+Flutter 的跨平台桌面端实时屏幕标注与录屏工具深度实践

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。 1. 项目背景与市场需求分析 在数字化转型加速的今天,实时屏幕标注与录屏工具已成为在线教育、远程办公、技术支持的刚需工具。据统计,2024年全球屏幕录制软件市场规模达…

作者头像 李华
网站建设 2026/6/23 10:07:38

【干货预警】不懂大模型没关系!3分钟搞懂AI Agent职场新风口

你是不是经常听说AI Agent却不知道它到底是什么?别急!今天这篇「职场人必备指南」,用最直白的话说清这个改变未来的技术!一、认知篇:Agent究竟是什么?🔍 用快递小哥秒懂Agent眼睛传感器&#xf…

作者头像 李华
网站建设 2026/6/22 20:57:47

CSS Grid布局详解

CSS Grid布局详解CSS Grid布局是CSS中最强大的布局系统,它是一个二维布局系统,可以同时处理行和列,非常适合创建复杂的网页布局。一、Grid基本概念1.1 容器和项目Grid容器:使用display: grid或display: inline-grid的元素Grid项目…

作者头像 李华
网站建设 2026/6/23 17:42:21

解决 pnpm 构建脚本被阻止(Ignored build scripts)的问题

解决 pnpm 构建脚本被阻止的问题当使用 pnpm 时出现 "Ignored build scripts" 警告,这是因为 pnpm 的安全策略阻止了某些包的构建脚本执行。这是 pnpm 的一个安全特性,防止恶意包执行潜在危险的构建脚本。Ignored build scripts: esbuild.Run …

作者头像 李华