一、case条件语句

1.语法

  1. case "变量" in
  2. 1)
  3. 指令 1...
  4. ;;
  5. 2)
  6. 指令 2...
  7. ;;
  8. *)
  9. 指令 3...
  10. esac

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

2.实践

(1)根据用户输入判断输入的是哪个数字

  1. [root@codis-178 ~]# cat 9_1.sh
  2. #!/bin/bash
  3. read -p "Please input a number:" ans
  4. case "$ans" in
  5. 1)
  6. echo "The num you input is 1"
  7. ;;
  8. 2)
  9. echo "The num you input is 2"
  10. ;;
  11. [3-9])
  12. echo "The num you input is $ans"
  13. ;;
  14. *)
  15. echo "Please input [0-9] int"
  16. exit;
  17. esac
  18. [root@codis-178 ~]# sh 9_1.sh
  19. Please input a number:2
  20. The num you input is 2
  21. [root@codis-178 ~]# sh 9_1.sh
  22. Please input a number:5
  23. The num you input is 5
  24. [root@codis-178 ~]# sh 9_1.sh
  25. Please input a number:10
  26. Please input [0-9] int

(2)打印一个水果菜单

1)apple

2)pear

3)banana

4)cherry

当用户输入对应的数字选择水果时,告诉他选择的水果是什么,并给水果单词加上一种颜色。

  1. [root@codis-178 ~]# cat 9_2.sh
  2. #!/bin/bash
  3. RED_COLOR='\E[1;31m'
  4. GREEN_COLOR='\E[1;32m'
  5. YELLOW_COLOR='\E[1;33m'
  6. BLUE_COLOR='\E[1;34m'
  7. RES='\E[0m'
  8. echo '
  9. ==============
  10. 1.apple
  11. 2.pear
  12. 3.banana
  13. 4.cherry
  14. ============
  15. '
  16. read -p "pls select a num:" num
  17. case "$num" in
  18. 1)
  19. echo -e "${RED_COLOR}apple${RES}"
  20. ;;
  21. 2)
  22. echo -e "${GREEN_COLOR}pear${RES}"
  23. ;;
  24. 3)
  25. echo -e "${YELLOW_COLOR}banana${RES}"
  26. ;;
  27. 4)
  28. echo -e "${BLUE_COLOR}cherry${RES}"
  29. ;;
  30. *)
  31. echo "muse be {1|2|3|4}"
  32. esac
  33. [root@codis-178 ~]# sh 9_2.sh
  34. 9_2.sh: line 6: E[0m: command not found
  35. ==============
  36. 1.apple
  37. 2.pear
  38. 3.banana
  39. 4.cherry
  40. ============
  41. pls select a num:1
  42. apple
  43. [root@codis-178 ~]# sh 9_2.sh
  44. 9_2.sh: line 6: E[0m: command not found
  45. ==============
  46. 1.apple
  47. 2.pear
  48. 3.banana
  49. 4.cherry
  50. ============
  51. pls select a num:2
  52. pear
  53. [root@codis-178 ~]# sh 9_2.sh
  54. 9_2.sh: line 6: E[0m: command not found
  55. ==============
  56. 1.apple
  57. 2.pear
  58. 3.banana
  59. 4.cherry
  60. ============
  61. pls select a num:3
  62. banana

说明:

1)\E可以使用\033替代

2)[1的数字1表示加粗

3)31m表示红色

4)[0m表示关闭所有属性([1m表示高亮度,[4m表示下划线,[5m表示闪烁)

(3)给指定内容加指定的颜色

  1. [root@codis-178 ~]# cat 9_3.sh
  2. #!/bin/bash
  3. plus_color(){
  4. RED_COLOR='\E[1;31m'
  5. GREEN_COLOR='\E[1;32m'
  6. YELLOW_COLOR='\E[1;33m'
  7. BLUE_COLOR='\E[1;34m'
  8. PINK_COLOR='\E[1;35m'
  9. RES='\E[0m'
  10. if [ $# -ne 2 ];then
  11. echo "Usage:$0 content {red|yellow|blue|green|pink}"
  12. exit
  13. fi
  14. case "$2" in
  15. red|RED)
  16. echo -e "${RED_COLOR} $1 ${RES}"
  17. ;;
  18. yellow|YELLOW)
  19. echo -e "${YELLOW_COLOR} $1 ${RES}"
  20. ;;
  21. green|GREEN)
  22. echo -e "${GREEN_COLOR} $1 ${RES}"
  23. ;;
  24. blue|BLUE)
  25. echo -e "${BLUE_COLOR} $1 ${RES}"
  26. ;;
  27. pink|PINK)
  28. echo -e "${PINK_COLOR} $1 ${RES}"
  29. ;;
  30. *)
  31. echo "Usage:$0 content {red|yellow|blue|green|pink}"
  32. exit
  33. esac
  34. }
  35. plus_color "I" red
  36. plus_color "am" GREEN
  37. plus_color "oldboy" blue
  38. [root@codis-178 ~]# sh 9_3.sh
  39. I
  40. am
  41. oldboy

3.企业应用

实现通过传参的方式往/etc/openvpn_authfile.conf里添加用户

传参要求:

参数-add,表示添加后面接的用户名

参数-del,表示删除后面接的用户名

参数-search,表示查找后面接的用户名

注:如果有同名用户,则不能添加,如果没有对应的用户,则无需删除,查找到用户或没有用户时应给出明确提示

  1. [root@codis-178 ~]# cat 9_4.sh
  2. #!/bin/bash
  3. #Source function library
  4. . /etc/init.d/functions
  5. #config file path
  6. FILE_PATH=/etc/openvpn_authfile.conf
  7. [ ! -f $FILE_PATH ] && touch $FILE_PATH
  8. usage(){
  9. cat <<EOF
  10. USAGE: `basename $0` {-add|-del|-search} username
  11. EOF
  12. }
  13. #judge arg numbers
  14. if [ $# -ne 2 ];then
  15. usage
  16. exit 2
  17. fi
  18. case "$1" in
  19. -a|-add)
  20. shift
  21. if grep "^$1$" ${FILE_PATH} >/dev/null 2>&1
  22. then
  23. action $"vpnuser,$1 is exis" /bin/false
  24. exit
  25. else
  26. chattr -i ${FILE_PATH}
  27. /bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)
  28. echo "$1" >> ${FILE_PATH}
  29. [ $? -eq 0 ] && action $"Add $1" /bin/true
  30. chattr +i ${FILE_PATH}
  31. fi
  32. ;;
  33. -d|-del)
  34. shift
  35. if [ `grep "\b$1\b" ${FILE_PATH}|wc -l` -lt 1 ]
  36. then
  37. action $"vpnuser,$1 is exis" /bin/false
  38. exit
  39. else
  40. chattr -i ${FILE_PATH}
  41. /bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)
  42. sed -i "/^${1}$/d" ${FILE_PATH}
  43. [ $? -eq 0 ] && action $"Del $1" /bin/true
  44. chattr +i ${FILE_PATH}
  45. exit
  46. fi
  47. ;;
  48. -s|-search)
  49. shift
  50. if [ `grep -w "$1" ${FILE_PATH}|wc -l` -lt 1 ]
  51. then
  52. echo $"vpnuser,$1 is not exist.";exit
  53. else
  54. echo $"vpnuser,$1 is exist.";exit
  55. fi
  56. ;;
  57. *)
  58. usage
  59. exit
  60. ;;
  61. esac
  62. [root@codis-178 ~]# sh 9_4.sh
  63. USAGE: 9_4.sh {-add|-del|-search} username
  64. [root@codis-178 ~]# sh 9_4.sh -a oldboy
  65. Add oldboy [ OK ]
  66. [root@codis-178 ~]# rm -f /etc/openvpn_authfile.conf
  67. rm: cannot remove `/etc/openvpn_authfile.conf': Operation not permitted
  68. [root@codis-178 ~]# sh 9_4.sh -search oldboy
  69. vpnuser,oldboy is exist.
  70. [root@codis-178 ~]# sh 9_4.sh -search oldgirl
  71. vpnuser,oldgirl is not exist.
  72. [root@codis-178 ~]# sh 9_4.sh -add oldgirl
  73. Add oldgirl [ OK ]
  74. [root@codis-178 ~]# sh 9_4.sh -s oldgirl
  75. vpnuser,oldgirl is exist.
  76. [root@codis-178 ~]# sh 9_4.sh -d oldgirl
  77. Del oldgirl [ OK ]
  78. [root@codis-178 ~]# sh 9_4.sh -s oldgirl
  79. vpnuser,oldgirl is not exist.

说明;

1)请注意grep精准过滤的三种用法

2)shift,将$1清除,将$2替换为$1,位置参数左移(这是为了取用户名)

3)chattr 加解锁文件

开发MySQL多实例中3306实例的启动停止脚本

  1. [root@codis-178 ~]# cat 3306.sh
  2. #!/bin/bash
  3. #init
  4. port=3306
  5. mysql_user="root"
  6. mysql_pwd="oldboy123"
  7. CmdPath="/usr/local/mysql/bin"
  8. mysql_sock="/data/${port}/mysql.sock"
  9. #startup function
  10. function_start_mysql(){
  11. if [ ! -e "$mysql_sock" ];then
  12. printf "Starting MySQL...\n"
  13. /bin/sh ${CmdPath}/mysqld_safe --default-file=/data/${port}/my.cnf 2>&1 >/dev/null &
  14. else
  15. printf "MySQL is running...\n"
  16. exit
  17. fi
  18. }
  19. #stop function
  20. function_stop_mysql(){
  21. if [ ! -e "$mysql_sock" ];then
  22. printf "MySQL is stopped...\n"
  23. exit
  24. else
  25. printf "Stoping MySQL...\n"
  26. ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
  27. fi
  28. }
  29. #restart function
  30. function_restart_mnysql(){
  31. printf "Restarting MySQL...\n"
  32. function_stop_mysql
  33. sleep 5
  34. function_start_mysql
  35. }
  36. case $1 in
  37. start)
  38. function_start_mysql
  39. ;;
  40. stop)
  41. function_stop_mysql
  42. ;;
  43. restart)
  44. function_restart_mnysql
  45. ;;
  46. *)
  47. printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
  48. esac

4.case语句的适用性

(1)适合变量值较少且为固定的数字或字符串集合的情况

(2)写服务的启动脚本,传参不同且具有少量的字符串

Shell编程之case条件的更多相关文章

  1. shell编程之case分支语句

    shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...

  2. 03 shell编程之case语句与函数

    本文所有内容均来自当年博主当年学习笔记,若有不足欢迎指正 Shell编程之case语句与函数 学习目标: 掌握case语句编程 掌握shell函数的使用 目录结构: Case语句 Case语句的作用 ...

  3. SHELL编程之case与函数

    一.case语句概述 使用case语句改写if多分支可以使脚本结构更加清晰.层次分明 针对变量不同取值,执行不同的命令序列 case语句结构如下: case 变量值  in 模式1) 命令序列1 ;; ...

  4. Shell编程之IF条件

    一.if条件语句的知识与实践 1.if条件语句语法(单分支结构) 第一种: if < 条件表达式 > then 指令 fi 第二种: if < 条件表达式 >; then 指令 ...

  5. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  6. shell编程之if语句

    shell编程之if判断 目录 shell编程之if判断 1.整数比较 2.字符串比较 3.举例 1.数字比较 2.字符串比较 4.Other 1.整数比较 -eq 等于,如:if [ "$ ...

  7. shell 编程之 if...else case...esac

    shell的条件判断语句有三种 if...fi  语句 if...else...fi  语句 if...elif...fi  语句 例子: a=10; b=20; if [ $a -gt %b ] t ...

  8. shell 编程之 for while until 循环

    shell 的for循环 的格式如下: for 变量  in 列表 do ... done 列表是一组值的序列 每个值通过空格隔开 每循环一次,列表中的下一个值赋给变量 in 列表是可选的,如果不用他 ...

  9. shell编程学习笔记(九):Shell中的case条件判断

    除了可以使用if条件判断,还可以使用case 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script08.sh 开始编写scrip ...

随机推荐

  1. tomcat的bin目录中startup.bat/tomcat.6.exe/tomcat6w.exe区别

    一.tomcat6.exe 与 startup.bat的区别 1.两者都可以用于启动Tomcat tomcat6.exe则是必须将tomcat注册Windows服务之后才可以用于启动tomcat服务; ...

  2. php 常面试

    问题:请用最简单的语言告诉我PHP是什么? 回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言. 问题:什么是MVC? 回答:MVC由Model(模 ...

  3. 大量数据导入导致mysql自动重启

    昨天晚上第十款做数据库迁移,数据库版本:Version: '5.1.61',数据量27G左右 message报错信息如下: Mar :: VM_163_210_tlinux kernel: [, oo ...

  4. asp.net网站底部的版权信息实现代码且可维护

    网站底部的版权信息在特殊情况还是比较重要的所以在实现的时候一定要尽可能的做到可维护性,接下来将介绍一些技巧可达到可维护效果,感兴趣的你可不要错过了哈 一个大网站页面很多,如果每个版权信息直接写在下面, ...

  5. (转载)Unity3D研究院之使用 C#合成解析XML与JSON(四十一)

    XML与JSON在开发中非常重要, 其实核心就是处理字符串.一个是XML的字符串一个是JSON的字符串,尤其是在处理网络请求的时候,肯定是要用的.另外现在JSON非常的流行,我写了一个简单的例子融合了 ...

  6. Python_selenium之执行JavaScript

    Python_selenium之执行JavaScript 一.简略的介绍selenium执行JavaScript 1. Example 1进入浏览器之后,弹出一个alert弹框 #coding:utf ...

  7. cocos2d-x:七彩连珠

    大学前,我一直以为学计算机就是学做游戏,或者玩游戏...(我果断的用大学的差不多五分之二实践了后面半块.) 大学后,人们一直以为学计算机的就是 修电脑.装机.盗qq号.word.excel....最近 ...

  8. iOS 数组的去重(普通的无序的去重和排序好的去重)

    本文转载至 http://blog.csdn.net/zhaopenghhhhhh/article/details/24972645 有时需要将NSArray中去除重复的元素,而存在NSArray中的 ...

  9. A Simple Problem with Integers(线段树)

    F - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:% ...

  10. Python3.6全栈开发实例[005]

    5.接收两个数字参数,返回比较大的那个数字. def compare(a,b): return a if a > b else b # 三元表达式 print(compare(20,100))