【shell脚本】沐风晓月跟你聊聊shell脚本中的case实战

news2024/11/16 0:49:45

前言

前面我们已经介绍了while及for循环,结合if语句可以构建一些简单的控制面板及菜单脚本,今天我们来探讨下case语句。

case选择语句,主要用于对多个选择条件进行匹配输出,与if elif语句结构类似,通常用于脚本传递输入参数,打印出输出结果及内容,其语法格式以case…in开头,esac结尾。

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家
😉😉 💕 座右铭:先努力成长自己,再帮助更多的人,一起加油进步
🍺🍺🍺 💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

文章目录

  • 前言
  • 语法
  • case案例实战
    • 1. 宝塔面板
    • 2. 模拟GUI和鼠标交互,使用case语句
    • 3. 一个比较简单的case用户处理脚本
  • 总结

语法

#!/bin/bash
#By author 沐风晓月
case variable in
    pattern1)
        # 执行 pattern1 匹配时的代码块
        ;;
    pattern2|pattern3)
        # 执行 pattern2 或 pattern3 匹配时的代码块
        ;;
    pattern4)
        # 执行 pattern4 匹配时的代码块
        ;;
    *)
        # 如果没有任何模式匹配,则执行默认代码块
        ;;
esac
  • variable:一个变量或表达式,用于与模式进行匹配。

  • pattern1、pattern2等:一组模式,用于与variable进行比较。模式可以是固定的字符串,也可以是使用通配符匹配的模式。

  • ) 在每个模式之后,使用)来标记代码块的开始。

  • ;; 在每个代码块的末尾,使用;;来表示一个模式匹配结束。这是必需的,以确保仅执行匹配的代码块。

  • | 在多个模式之间使用竖线|进行分隔,表示多个模式共享相同的代码块。

  • ) 可以使用)来指定默认的代码块,当没有任何模式匹配时,将执行该代码块。

  • esac:esac 是 case的倒序,用于结束整个case语句块。

模式匹配:

在这里插入图片描述

案例:


```bash
#!/bin/bash

read -p "请输入一个数字(1-3):" num

case $num in
    1)
        echo "你选择了数字1"
        ;;
    2|3)
        echo "你选择了数字2或数字3"
        ;;
    *)
        echo "无效的输入"
        ;;
esac

case案例实战

1. 宝塔面板

#!/bin/bash

# 清除屏幕
tput clear

# 将光标移动到第3行第15列
tput cup 3 15

# 设置文本颜色为黄色,输出"宝塔面板"
tput setaf 3
echo "宝塔面板"
tput sgr0

# 将光标移动到第5行第17列
tput cup 5 17

# 设置反显,输出"沐风管理组"
tput rev
echo "沐风管理组"
tput sgr0

# 将光标移动到第7行第15列,输出"1.安装httpd"
tput cup 7 15
echo "1.安装httpd"

# 将光标移动到第8行第15列,输出"2.安装MySQL"
tput cup 8 15
echo "2.安装MySQL"

# 将光标移动到第9行第15列,输出"3.安装php"
tput cup 9 15
echo "3.安装php"

# 将光标移动到第10行第15列,输出"4.安装wordpress"
tput cup 10 15
echo "4.安装wordpress"

# 设置粗体,将光标移动到第12行第15列,提示用户输入选项
tput bold
tput cup 12 15
read -p "Enter your choice [1-4]: " choice

# 根据用户输入执行相应操作
case $choice in
    1)
        echo "你选择了安装httpd"
        # TODO: 实际安装httpd的操作
        ;;
    2)
        echo "你选择了安装MySQL"
        # TODO: 实际安装MySQL的操作
        ;;
    3)
        echo "你选择了安装php"
        # TODO: 实际安装php的操作
        ;;
    4)
        echo "你选择了安装wordpress"
        # TODO: 实际安装wordpress的操作
        ;;
    *)
        echo "无效的选择"
        ;;
esac

执行结果:
在这里插入图片描述
当选择了1-4的任意选项,就会跳转到case语句中:

在这里插入图片描述

2. 模拟GUI和鼠标交互,使用case语句

通过使用图形用户界面(GUI)工具包,例如dialog或whiptail,在Shell脚本中创建文本界面,以实现更高级的用户交互,包括菜单、复选框、输入框等。这些工具包提供了更丰富的界面元素和交互功能,可以模拟鼠标点击选择。

[root@mufeng41 ~]# cat mouse.sh 
#!/bin/bash


# 显示菜单选择对话框
dialog --menu "请选择一个选项:" 10 40 3 \
    1 "选项1" \
    2 "选项2" \
    3 "选项3" \
    2>/tmp/choice.txt

# 从用户选择保存的文件中读取选择
choice=$(cat /tmp/choice.txt)

# 根据选择执行相应操作
case $choice in
    1)
        echo "选择了选项1"
        ;;
    2)
        echo "选择了选项2"
        ;;
    3)
        echo "选择了选项3"
        ;;
    *)
        echo "无效的选择"
        ;;
esac

这个示例使用了dialog --menu命令创建一个菜单选择对话框,用户可以使用键盘的方向键来选择菜单项,然后按下回车键确认选择。用户的选择将保存在 /tmp/choice.txt 文件中,并在后续的操作中读取并进行相应处理。

执行结果:

在这里插入图片描述
当用户选择了1,就会出来与1相关的case语句。

3. 一个比较简单的case用户处理脚本

[sysadmin@ansible bin]$ cat case-menu
#!/bin/bash

clear
echo "
Please Select:

1.Display System Information
2.Display Disk Space
3.Display Home Space Utilization
4.Quit
"
read -p "Enter selection [0-3] > "

case "$REPLY" in
        0)      echo "Program terminated."
                exit
                ;;
        1)      echo "Hostname: $HOSTNAME"
                uptime
                ;;
        2)      df -h
                ;;
        3)      if [[ "$(id -u)" -eq 0 ]]; then
                        echo "Home Space Utilization (ALL Users)"
                        du -sh /home/*
                else
                        echo "Home Space Utilizaion ($USER)"
                        du -sh "$HOME"
                fi
                ;;
        *)      echo "Invalid entry." >&2
                exit 1
                ;;
esac

总结

case 在日常的工作中,应用还是比较频繁的,以上就是case的全部内容,一起加油,我是沐风晓月,我在csdn等你。

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

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

相关文章

阵列模式合成第 I 部分:清零、窗口化和细化(附源码)

一、前言 本示例说明如何使用相控阵系统工具箱解决一些阵列合成问题。在相控阵设计应用中,通常需要找到一种方法来逐渐减小晶片响应,以使最终的阵列阵列模式满足某些性能标准。典型的性能标准包括主瓣位置、零位置和旁瓣电平。 二、使用旁瓣消除器消除干…

两个进程定时通过共享内存进行通信

进程1-client #include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/shm.h> #include <unistd.h> #include <string.h>#define SHM_SIZE 10 * 1024 * 1024 // 共享内存大小为10M #define WRITE_INTERVAL 1 …

PHP 基础知识

目录 PHP基础 2 PHP代码标记 2 PHP注释 2 PHP语句分隔符 2 PHP变量 3 常量 3 数据类型 4 流程控制 6 文件 7 函数 9 闭包 11 常用系统函数 12 错误处理 13 错误显示设置 15 字符串类型 17 字符串相关函数 19 数组 21 遍历数组 22 数组的相关函数 25 PHP基础 PHP是一种运行在服务…

通过netty源码带你一步步剖析NioEventLoop 的任务队列原理

NioEventLoop 的异步任务队列成员: NioEventLoop 中对newTaskQueue 接口的实现,返回的是JCTools工具包Mpsc队列(多生产者单一消费者无锁队列,(无界和有界都有实现) private static Queue<Runnable> newTaskQueue0(int maxPendingTasks) {// newMpscQueue 无界对列,newM…

10万元存款是年轻人的一个“坎”?存款超过10万就会超过53.7%的人?不要焦虑,以过来人的身份帮你分析分析!

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

ChatGPT最新版实现多样化聚合文章的批量生成文章

随着人工智能技术的不断发展&#xff0c;ChatGPT最新版在多样化聚合文章的批量生成方面取得了重要突破。本文将从随机选取的8个方面&#xff0c;对ChatGPT最新版的构建思想进行详细阐述。这些方面包括&#xff1a;自然语言处理、大规模数据集、迁移学习、多模态输入、生成模型优…

JS将图片转pdf,jspdf的使用

Hi I’m Shendi 最近做转换工具&#xff0c;需要将图片转pdf&#xff0c;这里记录下来 JS将图片转pdf&#xff0c;jspdf的使用 简介 A library to generate PDFs in JavaScript. 一个用JavaScript生成PDF的库。 下载 在网站或github下载 https://parall.ax/products/jspdf …

图像增强之图像锐化(边缘增强)之sobel算子

note matx (-1,0,1;-2,0,2;-1,0,1) maty (-1,-2,-1;0,0,0;1,2,1) code // 图像增强之图像锐化(边缘增强)之sobel算子 void GetSobelMat(Mat& sobelX, Mat& sobelY) {sobelX (Mat_<int>(3,3) << -1,0,1,-2,0,2,-1,0,1);sobelY (Mat_<int>(3,3…

【面试】数据仓库

数据分层 维度建模 (0) 什么是维度建模&#xff1f; 维度建模以分析决策的需求出发构建模型&#xff0c;构建的数据模型为分析需求&#xff08;也就是我们通常所说的数据分析&#xff09;服务。它重点解决如何更快速完成分析需求&#xff0c;同时还有较好的大规模复杂查询的响…

品达通用权限系统-Day01

文章目录 1. 项目概述1.1 项目介绍1.2 业务架构1.3 技术架构1.4 环境要求 2. Spring Boot starter2.1 starter介绍2.2 starter原理2.2.1 起步依赖2.2.2 自动配置2.2.2.1 基于Java代码的Bean配置2.2.2.2 自动配置条件依赖2.2.2.3 Bean参数获取2.2.2.4 Bean的发现2.2.2.5 Bean的加…

NXP i.MX 8M Plus工业开发板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

1 评估板简介 创龙科技TLIMX8MP-EVM是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 单核ARM Cortex-M7异构多核处理器设计的高性能工业评估板&#xff0c;由核心板和评估底板组成。ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz&#xff0c;ARM Cortex-M7实时处理单元主…

【Java】如何在 Java 中使用条件运算符

本文仅供学习参考&#xff01; 相关教程地址&#xff1a; http://c.biancheng.net/view/792.html https://www.cnblogs.com/bmbm/archive/2012/01/16/2342239.html 在软件开发中&#xff0c;运算符处理表达式中的一个或多个操作数。Java 编程语言支持以下类型的运算符&#xff…

HTML5、JS实现元素拖拽排序

先介绍一下html5的drag属性,拖放&#xff08;Drag 和 drop&#xff09;是 HTML5 标准的组成部分。想要启用drag&#xff0c;只要给元素加上draggable"true"就行了&#xff08;Safari 5.1.2除外&#xff09;。 拖动事件 事件分为两类&#xff0c;当前拖动的元素上的事…

【Makefile】解析Makefile:驾驭自动编译的力量

Makefile简介 一个工程中的源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重新编译&#xff0c;甚至于进行更复杂的…

你如何理解 JS 的继承?

在JavaScript中&#xff0c;继承是一种机制&#xff0c;允许一个对象&#xff08;子类&#xff09;从另一个对象&#xff08;父类&#xff09;继承属性和方法。这使得子类可以共享父类的功能&#xff0c;并有能∧自身定义新的功能。 JavaScript中的继承通过原型链实现。 具体来…

JavaWeb开发(前端Web开发)

文章目录 前言一、初识Web1.Web开发-介绍2.初识Web前端3.Web标准 二、HTML1.HTML快速入门2.VS Code开发工具3.基础标签&样式4.表格标签5.表单标签 三、JavaScript1.JS-介绍2.JS-引入方式3.JS-基础语法3.1.JS-基础语法-书写语法3.2.JS-基础语法-变量3.2.JS-基础语法-数据类型…

面向Java开发者的ChatGPT提示词工程(7)

在如今信息爆炸的时代&#xff0c;我们面临着海量的文字信息&#xff0c;很难抽出足够的时间去阅读所有感兴趣的内容。然而&#xff0c;大语言模型为我们提供了一种有效的解决方案&#xff1a;通过自动文本摘要&#xff0c;帮助我们快速获取文章的核心内容。这种技术已经被广泛…

vue2 h5开发前进刷新后退缓存实现

vue2 h5开发前进刷新后退缓存实现 在store定义变量 const state {includedComponents: [] }const mutations {includedComponents (state, data) {state.includedComponents data} }在app.vue&#xff08;我这里主要在layout.vue修改&#xff09;使用 keep-alive :include…

使用Microsoft.Office.Interop.PowerPoin遥控PPT

Microsoft.Office.Interop.PowerPoin操作PPT 主窗体&#xff0c;填写ppt路径&#xff0c;打开ppt打开ppt后&#xff0c;可用代码操作ppt可获取每页PPT截图&#xff0c;并获取对应小节名称&#xff0c;备注等代码下载地址联系qq 主窗体&#xff0c;填写ppt路径&#xff0c;打开p…

四.图像处理与光学之3A的 AE

五.图像处理与光学之3A的 AE 3A 是Camera ISP 控制算法的一个重要组成部分,通常分为自动曝光(AE)、自动聚焦(AF)、自动白平衡(AWB)三个组件。 5.0 概述自动曝光(Auto Exposure) 自动曝光算法可以理解为一个伺服系统,它不断监控ISP生成的每一帧图像的曝光状态,如果发现采…