Shell脚本学习-case条件语句

news2024/11/24 2:49:54

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

语法结构:

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

说明:

1)case语句获取的变量的值与表达式部分的值等逐一进行比较;如果匹配,就执行值后面对应的指令,直到遇到双分号为止。然后跳出case语句的主体,执行esac后面的语句。

2)如果没有匹配到变量的任何值,则执行*)后面的指令,这个地方通常是给使用者提示信息usage。这部分相当于if多分支结构最后的else语句部分。

3)书写的时候注意不同行内容的缩进距离。

4)case语句相当于一个if的多分支结构语句。

示例1:

根据用户的输入判断用户输入的是哪个数字?

[root@vm1 scripts]# cat judge_num.sh
#!/bin/bash
#

read -p "Please input a number: " i

case "$i" in
  1)
    echo "The num you input is 1"
    ;;
  2)
    echo "The num you input is 2"
    ;;
  [3-9])
    echo "The num you input is $i"
    ;;
  *)
    echo "Please input [0-9] int."
    exit
esac

测试结果:

[root@vm1 scripts]# sh judge_num.sh
Please input a number: 5
The num you input is 5
[root@vm1 scripts]# sh judge_num.sh
Please input a number: 2
The num you input is 2
[root@vm1 scripts]# sh judge_num.sh
Please input a number: 9
The num you input is 9
[root@vm1 scripts]# sh judge_num.sh
Please input a number: 10
Please input [0-9] int.

可以看到case比if语句更简洁更规范。

示例2:

根据用户的选择输入判断是哪种水果并加上不同的颜色。

[root@vm1 scripts]# cat fruit_menu_select.sh
#!/bin/bash
#

# color defined      #把颜色定义成变量,方便使用
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
RES='\E[0m'

cat << EOF
==========
1.apple
2.pear
3.banana
4.cherry
==========
EOF

read -p "Please select a fruit: " num

case "$num" in
  1)
    echo -e "${RED_COLOR}apples${RES}"
    ;;
  2)
    echo -e "${GREEN_COLOR}pear${RES}"
    ;;
  3)
    echo -e "${YELLOW_COLOR}banana${RES}"
    ;;
  4)
    echo -e "${BLUE_COLOR}cherry${RES}"
    ;;
  *)
    echo "your input must be {1|2|3|4}"
esac

测试结果:

代码说明:

1)echo -e可以识别转义字符;

2)\E 可以使用\033代替;

3)[1 数字1可以加粗显示显示。

4)31m表示红色的字体;

5)[0m 表示关闭属性,可以换成不同的数字,代表不同意思。

例如:

\E[0m:表示关闭所有属性;

\E[1m: 表示设置高亮度;

\E[4m: 表示下划线

\E[5m: 表示闪烁

\E[7m: 表示反显

\E[8m: 表示消隐

可以通过man_console_codes来查看。

在这个过程中,我们遇到一个问题,通过man console_codes 有个提示信息:

No manual entry for console_codes。

然后我这边执行如下命令:

yum install -y man-pages

然后再执行man console_codes就可以查看了。

 

[root@vm1 scripts]# cat fruit_menu_select2.sh
#!/bin/bash
#

# color defined
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
RES='\E[0m'

function usage() {
    echo "USAGE: Your choise must be {1|2|3|4}"
    exit 1
}

function menu() {
cat << END
    ==========
    1.apple
    2.pear
    3.banana
    4.cherry
    ==========
END
}

function choose() {
read -p "Please select a choise: " fruit

case "$fruit" in
  1)
    echo -e "${RED_COLOR}apples${RES}"
    ;;
  2)
    echo -e "${GREEN_COLOR}pear${RES}"
    ;;
  3)
    echo -e "${YELLOW_COLOR}banana${RES}"
    ;;
  4)
    echo -e "${BLUE_COLOR}cherry${RES}"
    ;;
  *)
    usage
esac
}

function main(){
    menu
    choose
}

main

 将这段代码进行了优化,使用函数模块化,看起来美观了不少。

可以将这块的思想渗透到工作的代码中,我们在工作中可以将正确的信息使用绿色标注出来,将错误的信息用红色标注出来,一般的警告使用蓝色标注出来。那么在脚本跑的时候就能很快判断脚本的是否有错误,这是我再工作中使用颜色标注的体会。

另外,我们推荐在脚本中定义变量的方式来给字体加颜色。

# color defined
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK_COLOR='\E[1;35m'
RES='\E[0m'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/825867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从 GPU 到 ChatGPT,一文带你理清GPU/CPU/AI/NLP/GPT之间的千丝万缕【建议收藏】

目录 硬件 GPU 什么是 GPU&#xff1f; GPU 是如何工作的&#xff1f; GPU 和 CPU 的区别 GPU 厂商 海外头部 GPU 厂商&#xff1a; 国内 GPU 厂商&#xff1a; nvidia 的产品矩阵 AI 什么是人工智能 (Artificial Intelligence-AI)&#xff1f; 人工智能细分领域 …

手把手教你写代码——基于控制台的通讯录管理系统(多人)(代码详细注释)

写在前面 本文章适合刚开始学习java的同学&#xff0c;不适合已参与java开发的人群&#xff01;本项目源代码已绑定资源中可免费获取&#xff01;如果对你有帮助请 栏目介绍 本栏目专为入门java学习者设计的一些简单的入门项目 功能介绍 本项目为简单的基于控制台的通讯录管理系…

音乐节《迷笛音乐节》游玩感

上周&#xff0c;去了烟台&#xff0c;参加音乐节&#xff0c;以前从未参加过&#xff0c;所以趁着本周六周日双休的时候&#xff0c;去游玩了一次。&#xff08;1&#xff09;一种新奇体验 对于自己来说&#xff0c;参加音乐节还是一种新奇的体验的&#xff0c;也是疫情放开了…

【MyBatis】初学MyBatis

目录 MyBatis 是什么&#xff1f;MyBatis框架搭建1.添加MyBatis框架2.设置MyBatis配置数据库的相关链接信息xml 保存路径和命名格式 根据MyBatis写法完成数据库的操作MyBatis插件MyBatis传递参数查询${} 和 #{} 有什么区别&#xff1f;SQL注入问题 MyBatis like查询MyBatis多表…

Lombok,一个神奇的存在

1、概述 Lombok主要用于在编译POJO类源文件时通过注解的方式自动为该类生成构造方法、getter/setter、equals、hashcode、toString等方法&#xff0c;有效地简化了POJO类代码&#xff0c;提高了软件的开发速度。 2、安装 a、启动IntelliJ IDEA—>点击CtrlAltS快捷键&…

【LeetCode】链表反转

题目 题目&#xff1a;给定单链表头节点&#xff0c;将单链表的链接顺序反转过来 例&#xff1a; 输入&#xff1a;1->2->3->4->5 输出&#xff1a;5->4->3->2->1 要求&#xff1a;按照两种方式实现 解决办法 方式一&#xff1a;&#xff08;直接迭…

从0开始自学网络安全(黑客)

前言 黑客技能是一项非常复杂和专业的技能&#xff0c;需要广泛的计算机知识和网络安全知识。你可以参考下面一些学习步骤&#xff0c;系统自学网络安全。 在学习之前&#xff0c;要给自己定一个目标或者思考一下要达到一个什么样的水平&#xff0c;是学完找工作&#xff08;…

这所211考数一英二,学硕降分33分,十分罕见!

一、学校及专业介绍 合肥工业大学&#xff08;Hefei University of Technology&#xff09;&#xff0c;简称“合工大”&#xff0c;校本部位于安徽省合肥市&#xff0c;是中华人民共和国教育部直属的全国重点大学&#xff0c;是国家“双一流”建设高校&#xff0c; 国家“211工…

PHP代码审计——实操!

ctfshow PHP特性 web93 八进制与小数点 <?php include("flag.php"); highlight_file(__FILE__); if(isset($_GET[num])){$num $_GET[num];if($num4476){die("no no no!");}if(preg_match("/[a-z]/i", $num)){die("no no no!")…

git 忽略掉不需要的文件

第一步&#xff1a;创建.gitignore文件 touch .gitignore 第二步&#xff1a;使用vi编辑器 输入不需要的文件&#xff0c;或用通配符*来忽视一系列文件 效果&#xff1a;

【Java可执行命令】(十二)依赖分析工具jdeps:通过静态分析字节码并提取相关信息来实现依赖分析 ~

Java可执行命令之jdeps 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 jdeps -dotoutput < dir>3.3 jdeps -s3.4 jdeps -v3.5 jdeps -cp < path>3.6 注意事项&#xff1a; 4️⃣ 应用场景&#x1f33e; 总结 1️⃣ 概念 Java中的jdeps命令是一个用于分析类…

使用脱机 MFA确保远程员工的安全

远程工作支持的优势 未更改的企业访问&#xff1a;远程工作支持开辟了访问企业网络和资源以及其中保存的数据的替代方法。应采取必要措施&#xff0c;确保它们保持完整&#xff0c;不受远程破坏企图的影响。提高工作效率&#xff1a;理想情况下&#xff0c;远程工作支持可提高…

程序框架-事件中心模块-观察者模式

1.Monster //触发事件 EventCenter.GetInstance().EventTrigger("MonsterDead",this);2.Player void Start() { EventCenter.GetInstance().AddEventListener("MonsterDead", MonsterDeadDo); }public void MonsterDeadDo(object info) {Debug.Log(&q…

【测试开发】Mq消息重复如何测试?

本篇文章主要讲述重复消费的原因&#xff0c;以及如何去测试这个场景&#xff0c;最后也会告诉大家&#xff0c;目前互联网项目关于如何避免重复消费的解决方案。 Mq为什么会有重复消费的问题? Mq 常见的缺点之一就是消息重复消费问题&#xff0c;产生这种问题的原因是什么呢…

从封面开始,打造一个引人注目的视频作品

在如今的互联网时代&#xff0c;短视频已经成为了人们生活中不可或缺的一部分。而一个吸引人的视频封面可以让你的作品更具吸引力&#xff0c;吸引更多观众的点击。那么&#xff0c;如何制作一个令人印象深刻的视频封面呢&#xff1f;下面就让我们揭秘一些实用技巧吧&#xff0…

Chrome 75不支持保存成mhtml的解决方法

在Chrome 75之前&#xff0c;可以设置chrome://flags -> save as mhtml来保存网页为mhtml。 升级新版&#xff0c;发现无法另存为/保存网页为MHTML了。 在网上搜索无果后&#xff0c;只得从chromium项目的commits中查找&#xff0c;原来chrome搞了个"Chrome Flag Owner…

新闻稿发布中,首发来源和转载是什么意思?

一秒推小编告诉您&#xff0c;在新闻稿发布中&#xff0c;首发来源和转载是两个常用的词语&#xff0c;它们有着不同的含义和使用场合。#新闻稿发布# 首发来源指的是原创的、第一次发布该条新闻的媒体或媒体机构。比如&#xff0c;如果一家新闻机构发布了一则新闻稿&#xff0c…

圆圈中最后剩下的数字(约瑟夫环)——剑指 Offer 62

文章目录 题目描述法一 数学递归 题目描述 法一 数学递归 int lastRemaining(int n, int m){return f(n, m);}int f(int n, int m){if(n1){return 0;}int x f(n-1, m);return (mx)%n;}

浅析视频技术与AI智能感知与生鲜供应链的数字化应用

一、行业背景 近年来&#xff0c;我国肉类、水果、蔬菜、水产品、乳品、速冻食品等生鲜市场需求快速增长&#xff0c;营商环境持续改善&#xff0c;推动冷链物流较快发展&#xff0c;但仍面临不少突出瓶颈和痛点难点卡点问题&#xff0c;难以有效满足市场需求。传统生鲜食材供…

【EI/SCOPUS征稿】2023年通信网络与机器学习国际学术会议(CNML 2023)

2023年通信网络与机器学习国际学术会议&#xff08;CNML 2023&#xff09; 2023 International Conference on Communication Networks and Machine Learning 随着数据流量的显著增长&#xff0c;新的通信应用程序不断出现&#xff0c;并产生更多的数据流量&#xff0c;这些数…