shell 学习笔记8-case条件语句
一、case语句简介
1、什么是case条件语句
case条件语句就相当于多分支的if/elif/else条件语句,但是比这样的语句更规范更好看,经常被用在失效系统服务启动脚本等企业应用中
程序将case获取的变量的值与表达式部分的值1、值2、值3等逐个进行比较,如果获取的变量值和某个值相匹配,就会执行值后面对应的执行知道执行双分号;;才停止,然后在跳出case语句主体,执行case语句(esac字符)后面的其他命令
如果没找到匹配变量的任何值,则执行"*)"后面的指令,通常是给使用者的使用提示直到遇到双分号;;或者esac结束,这个类似if多分支语句中最后else语句
case语句表达式对应值的部分,可以使用管道等更多功能来匹配
2、语法
case "变量" in
值 1)
指令1...
;;
值 2)
指令2...
;;
*)
指令3...
esac
3、逻辑图
二、范例
1、根据用户输入判断用户收入的是哪个数字
如果用户输入的是1~9的任易数字,则输出对应输入的数字;如果是其他数字级字符,则发回输入不正确的提示,并退出
1)case方式表达
[root@web1 scripts]# cat test26.sh
#!/bin/bash
#this script is created by zxg
#www.cnblogs.com/zhangxingeng/
read -p "please input a number:" ans #<---打印信息提示用户输入,输入信息复制给ans变量
case "$ans" in #<---case语句获取ans变量值,进入程序匹配比较
)
echo "the num you input is 1"
;;
)
echo "the num you input is 2"
;;
[-])
echo "the num you input is $ans"
;;
*)
echo "please input [0-9] int"
exit; #<---esac语句结束最后一个值,可以省略双分号
esac
[root@web1 scripts]# ./test26.sh
please input a number:
the num you input is
[root@web1 scripts]# ./test26.sh
please input a number:
the num you input is
[root@web1 scripts]# ./test26.sh
please input a number:
the num you input is
[root@web1 scripts]# ./test26.sh
please input a number:
please input [-] int
[root@web1 scripts]#
2)if表达式方法
[root@web1 scripts]# cat test27.sh
#!/bin/bash
read -p "please input a number:" ans
if [ $ans -eq ];then
echo "the num you input is 1"
elif [ $ans -eq ];then
echo "the num you input is 2"
elif [ $ans -eq -a $ans -le ];then
echo "the num you input is $ans"
else
echo "the num you input must be [1-9]"
exit
fi [root@web1 scripts]# ./test2
test20.sh test21.sh test23.sh test25.sh test27.sh
test21-.sh test22.sh test24.sh test26.sh test2.sh
[root@web1 scripts]# ./test27.sh
please input a number:
the num you input is
[root@web1 scripts]# ./test27.sh
please input a number:
the num you input must be [-]
[root@web1 scripts]#
2、执行shell脚本,打印一个如下的水果菜单
(1)apple
(2)pear
(3)banana
(4)cherry
当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色,要用case语句
1)首先集中常用的颜色,并把zxg的字符串加上颜色
[root@web1 scripts]# cat test28.sh
#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
RES='\E[0m'
echo -e "$RED_COLOR zxg $RES"
echo -e "$YELLOW_COLOR zxg $RES"
[root@web1 scripts]#
2)然后开始做带颜色的水果菜单
[root@web1 scripts]# chmod +x test29.sh
[root@web1 scripts]# cat test29.sh
#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
RES='\E[0m'
echo ' #echo打印菜单,可以是使用cat更好
=====================
.apple
.pear
.banana
.cherry
=====================
'
read -p "pls select a num:" num #提示用户输入
case "$num" in
) #如果是1就输出echo的命令,下了一次类推
echo -e "${RED_COLOR}apple${RES}"
;;
)
echo -e "${GREEN_COLOR}pear${RES}"
;;
)
echo -e "${YELLOW_COLOR}banana${RES}"
;;
)
echo -e "${BLUE_COLOR}cherry${RES}"
;;
*)
echo "muse be {1|2|3|4}" #如果不匹配就提示
#这里省略了双分号
esac [root@web1 scripts]# ./test29.sh =====================
.apple
.pear
.banana
.cherry
===================== pls select a num:
apple
[root@web1 scripts]# ./test29.sh =====================
.apple
.pear
.banana
.cherry
===================== pls select a num:
pear
[root@web1 scripts]# ./test29.sh =====================
.apple
.pear
.banana
.cherry
===================== pls select a num:
banana
[root@web1 scripts]# ./test29.sh
3)cat打印菜单的方法,推荐
[root@web1 scripts]# chmod +x test30.sh
[root@web1 scripts]# cat test30.sh
#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
RES='\E[0m'
menu(){
cat <<END #另外一种方式是cat也可以用select循环,不常用,还有函数的方式也可以使用,方便重复使用
1.apple
2.pear
3.banana
END
}
menu
read -p "pls input your choice:" fruit
case "$fruit" in
)
echo -e "${RED_COLOR}apple${RES}"
;;
)
echo -e "${GREEN_COLOR}pear${RES}"
;;
)
echo -e "${YELLOW_COLOR}banana${RES}"
;;
esac
[root@web1 scripts]# ./test30.sh
.apple
.pear
.banana
pls input your choice:
apple
[root@web1 scripts]# ./test30.sh
.apple
.pear
.banana
pls input your choice:
no fruit you choose.
[root@web1 scripts]#
4)函数的方式表达,更加的专业
[root@web1 scripts]# cat test31.sh
#!/bin/bash
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(){ #使用帮助写成usage函数,方便重复使用
echo "USAGE: $0 {1|2|3|4}"
exit
}
function menu(){ #菜单内容写成函数,也是方便重复使用
cat <<END
.apple
.pear
.banana
END
}
function chose(){ #将输入也写成函数,方便重复使用
read -p "pls input your choice:" fruit
case "$fruit" in
)
echo -e "${RED_COLOR}apple${RES}"
;;
)
echo -e "${GREEN_COLOR}pear${RES}"
;;
)
echo -e "${YELLOW_COLOR}banana${RES}"
;;
*)
usage
esac
}
function main(){ #主函数,执行定义的所有函数,这是程序的入口,模拟c的编程方式
menu
chose
}
main #执行主函数,如下:
[root@web1 scripts]# ./test31.sh
.apple
.pear
.banana
pls input your choice:
apple
[root@web1 scripts]# ./test31.sh
.apple
.pear
.banana
pls input your choice:
USAGE: ./test31.sh {|||}
[root@web1 scripts]#
3、给输出的字符串加颜色
这个比较有趣了,通过echo 的-e参数,结合特殊的数字给不同的字符加上颜色并显示
1)内容加上不同的颜色
[root@web1 scripts]# echo -e "\033[30m 黑色 zxg \033[0m"
黑色 zxg
[root@web1 scripts]# echo -e "\033[31m 红色 zxg \033[0m"
红色 zxg
[root@web1 scripts]# echo -e "\033[32m 绿色 zxg \033[0m"
绿色 zxg
[root@web1 scripts]# echo -e "\033[33m 棕色 zxg \033[0m"
棕色 zxg
[root@web1 scripts]# echo -e "\033[34m 蓝绿色 zxg \033[0m"
蓝绿色 zxg
[root@web1 scripts]# echo -e "\033[35m 洋红色 zxg \033[0m"
洋红色 zxg
[root@web1 scripts]# echo -e "\033[37m 洋红色 zxg \033[0m"
洋红色 zxg
详细颜色,可以man console_codes
2)定义变量的方式给字体加颜色
[root@web1 scripts]# cat test32.sh
#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK='\E[1;35m'
RES='\E[0m' #ANSI控制码,关闭属性
echo -e "${RED_COLOR}======red color======${RES}"
echo -e "${YELLOW_COLOR}======yellow color======${RES}"
echo -e "${BLUE_COLOR}======blue color======${RES}"
echo -e "${GREEN_COLOR}======green color======${RES}"
echo -e "${PINK}======pink color======${RES}"
[root@web1 scripts]#
效果
3)开发一个指定内容加指定颜色的脚本
传参是,第一参数是内容,第二个参数是指定颜色
[root@web1 scripts]# cat test33.sh
#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK='\E[1;35m'
RES='\E[0m'
if [ $# -ne ];then #用if语句打印帮助提示,如果传入的参数个数不等于2,则打印
echo "Usage $0 content {red|yellow|blue|green}"
exit
fi
case "$2" in #$2是脚本传入的第二个参数,颜色字符串
red|RED)
echo -e "${RED_COLOR}$1${RES}" #给第一个参数$1加颜色
;;
yellow|YELLOW)
echo -e "${YELLOW_COLOR}$1${RES}"
;;
green|GREEN)
echo -e "${GREEN_COLOR}$1${RES}"
;;
blue|BLUE)
echo -e "${BLUE_COLOR}$1${RES}"
;;
pink|PINK)
echo -e "${PINK_COLOR}$1${RES}"
;;
*)
echo "Usage $0 content {red|yellow|blue|green}"
exit
esac [root@web1 scripts]# ./test33.sh
Usage ./test33.sh content {red|yellow|blue|green}
效果
另外一种更专业的写法
#!/bin/bash
function AddColor(){ #定义加颜色的函数AddColor
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK='\E[1;35m'
RES='\E[0m'
if [ $# -ne 2 ];then
echo "Usage $0 content {red|yellow|blue|green}"
exit
fi
case "$2" in
red|RED)
echo -e "${RED_COLOR}$1${RES}"
;;
yellow|YELLOW)
echo -e "${YELLOW_COLOR}$1${RES}"
;;
green|GREEN)
echo -e "${GREEN_COLOR}$1${RES}"
;;
blue|BLUE)
echo -e "${BLUE_COLOR}$1${RES}"
;;
pink|PINK)
echo -e "${PINK_COLOR}$1${RES}"
;;
*)
echo "Usage $0 content {red|yellow|blue|green}"
exit
esac
}
function main(){ #定义主函数main
AddColor $1 $2 #令颜色函数后面接$1和$2,即将函数参数转换为获取脚本的参数,注意,这里的$1和$2不能用引号括起来,否则脚本不传参也会被AddColor认为已传入参数
}
main $* #执行main函数,利用$*接受命令行的所有参数,并传入到main函数
4)使用case,通过脚本传入指定内容和指定颜色
[root@web1 scripts]# cat test34.sh
#!/bin/bash
plus_color(){ #定义指定字符内容加颜色的函数,就是上面的例子包上定义为函数
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK='\E[1;35m'
RES='\E[0m'
if [ $# -ne ];then
echo "Usage $0 content {red|yellow|blue|green}"
exit
fi
case "$2" in
red|RED)
echo -e "${RED_COLOR}$1${RES}"
;;
yellow|YELLOW)
echo -e "${YELLOW_COLOR}$1${RES}"
;;
green|GREEN)
echo -e "${GREEN_COLOR}$1${RES}"
;;
blue|BLUE)
echo -e "${BLUE_COLOR}$1${RES}"
;;
pink|PINK)
echo -e "${PINK_COLOR}$1${RES}"
;;
*)
echo "Usage $0 content {red|yellow|blue|green}"
exit
esac } plus_color "i" red #传入I字符和红色单词给plus_color函数
plus_color "am" green #传入am字符和绿色单词给Plus_color函数
plus_color "zxg" blue #传入zxg字符和颜色单词给plus_color函数
运行结果
5)给输出字符串加背景颜色
字的背景颜色对应的主子范围为40~47
[root@web1 scripts]# echo -e "\033[40;37m 黑底白字zxg\033[0m"
黑底白字zxg
[root@web1 scripts]# echo -e "\033[41;37m 红底白字zxg\033[0m"
红底白字zxg
[root@web1 scripts]# echo -e "\033[42;37m 绿底白字zxg\033[0m"
绿底白字zxg
[root@web1 scripts]# echo -e "\033[43;37m 棕底白字zxg\033[0m"
棕底白字zxg
[root@web1 scripts]# echo -e "\033[43;37m 绿底白字zxg\033[0m"
绿底白字zxg
[root@web1 scripts]# echo -e "\033[44;37m 绿底白字zxg\033[0m"
绿底白字zxg
[root@web1 scripts]# echo -e "\033[40;37m 黑底白字zxg\033[0m"
黑底白字zxg
[root@web1 scripts]# echo -e "\033[41;37m 红底白字zxg\033[0m"
红底白字zxg
[root@web1 scripts]# echo -e "\033[42;37m 绿底白字zxg\033[0m"
绿底白字zxg
[root@web1 scripts]# echo -e "\033[43;37m 棕底白字zxg\033[0m"
棕底白字zxg
[root@web1 scripts]# echo -e "\033[44;37m 蓝底白字zxg\033[0m"
蓝底白字zxg
[root@web1 scripts]# echo -e "\033[45;37m 洋红底白字zxg\033[0m"
洋红底白字zxg
[root@web1 scripts]# echo -e "\033[46;37m 蓝绿底白字zxg\033[0m"
蓝绿底白字zxg
[root@web1 scripts]# echo -e "\033[47;30m 白底黑字zxg\033[0m"
白底黑字zxg
[root@web1 scripts]#
执行效果
转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/11345169.html
参考:https://blog.51cto.com/oldboy/1855461
shell 学习笔记8-case条件语句的更多相关文章
- Go语言学习笔记五: 条件语句
Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...
- shell脚本中的case条件语句介绍和使用案例
#前言:这篇我们接着写shell的另外一个条件语句case,上篇讲解了if条件语句.case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,ca ...
- Java学习笔记之——if条件语句和三目运算符
一.if条件语句 语法: if(条件){ 执行语句1: }else{ 执行语句2: } 二.三目运算符 ? 条件运算符 语法: 表达式?结果1:结果2: 如果表达式结果为true,则结果为结果1 ...
- shell 学习笔记9-while/until循环语句
一.while循环语句 1.循环语句 循环愈久就是重复执行一条指令或一组执行,知道条件不在满足时停止,shell循环语句包括,while.until.for.select语句 2.while循环 主要 ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- 【python学习笔记】5.条件、循环和其他语句
[python学习笔记]5.条件.循环和其他语句 print: 用来打印表达式,不管是字符串还是其他类型,都输出以字符串输出:可以通过逗号分隔输出多个表达式 import: 导入模块 impo ...
- 『忘了再学』Shell流程控制 — 35、多分支case条件语句
目录 1.case条件语句介绍 2.case语句需要注意的内容 3.练习 示例1 示例2 1.case条件语句介绍 case语句和if-elif-else语句一样都是多分支条件语句,不过和if多分支条 ...
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
随机推荐
- java 判断list是否为空
问题: 之前用 list!=null 来判断list是否为空,但发现,定义一个list后,即使里面并没有加入任何元素,返回的结果仍旧是 true, 其实,本意是希望在没有任何元素时,返回 false, ...
- Prometheus磁盘监控
根据挂载目录 (node_filesystem_size_bytes {mountpoint ="/"} - node_filesystem_free_bytes {mountpo ...
- Linux下java进程CPU占用率高分析方法(二)
1. 通过 top 命令查看当前系统CPU使用情况,定位CPU使用率超过100%的进程ID:2. 通过 ps aux | grep PID 命令进一步确定具体的线程信息:3. 通过 ps -mp pi ...
- ubuntu下安装ftp服务
1. 安装vsftpd $ sudo apt-get install vsftpd 2. 创建一个用户user-ftp用于ftp服务 $ sudo adduser user-ftp 3.创建一个文件/ ...
- Error-JavaScript:SCRIPT1007: 缺少 ']'
ylbtech-Error-JavaScript:SCRIPT1007: 缺少 ']' SCRIPT1007: 缺少 ']' 1.返回顶部 · if (flag) { return eval(&quo ...
- 无法调用到appcode下的类
解决方法: 右键 appp_code下的类, 点击 “属性”, 里面 [生成操作] 一项 由内容 改为 编译 即可
- 【转载】 tf.split函数的用法
原文地址: https://blog.csdn.net/uestc_c2_403/article/details/73350457 由于tensorflow 版本更新问题 用法略有修改 ----- ...
- 【Tomcat】Tomcat 配置JNDI数据源(三)
数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connec ...
- LeetCode_349. Intersection of Two Arrays
349. Intersection of Two Arrays Easy Given two arrays, write a function to compute their intersectio ...
- composer autoload优化
为生产环境作准备 最后提醒一下,在部署代码到生产环境的时候,别忘了优化一下自动加载: composer dump-autoload --optimize 安装包的时候可以同样使用--optimize- ...