Shell编程之case语句实战(小结)

大家好,今天给大家带来的是Shell编程之case语句的使用!

其实case语句还是很好理解的,在shell编程中,if语句有它的语法,函数也有它的语法,那么在我们shell编程中的case语句也是有它的语法的,如下:

case 变量名 in
  值1)
   指令1
  ;;
  值2)
   指令2
  ;;
  值3)
   指令3
  ;;
esac 

在以上的代码中我们发现,以case开头,以esac结尾,就像我们的if语句,以if开头以fi结束时一样的。

例2:

case "找老公条件" in
   家里有房子)
    嫁给你...
  ;;
   家庭有背景)
    嫁给你...
  ;;
   很努力吃苦)
    那么我们可以先谈男女朋友..
  ;;
esac 

好了接下来我们实践,其实语法就是上面的一些基本语法,那么我么在实践中来体会case到底有什么用

其实自我认为case语句更适合一些菜单选项的脚本,那么我们先用if语句写一个菜单脚本如下:

#!/bin/bash
#!/bin/bash
# Date: 4:42 2018-2-5
# Mail: ywyankerp@163.com
# Founder: <YanKai>
# Describe: This is a one - button installation service script
function CDAN(){
cat << yankerp
1.米饭
2.面条
3.包子
yankerp
}
CDAN
read -p 请您输入您今天要吃什么: NUM
expr $NUM + 1 &>/dev/null
if [ "$?" -ne 0 ]
 then
  echo "请您输入{1|2|3}"
  exit 1
fi 

if [ "$NUM" -eq 1 ]
  then
   echo "小二,来一碗米饭"
elif [ $NUM -eq 2 ]
  then
   echo "小二,来一碗面条"
elif [ "$NUM" -eq 3 ]
  then
   echo "小二,来一锅包子"
fi 


首先我们看到我们上面的if语句,是不是感觉有点繁琐,那么接下来我们使用case语句来实现 如下:

#!/bin/bash
#!/bin/bash
# Date: 4:42 2018-2-5
# Mail: ywyankerp@163.com
# Founder: <YanKai>
# Describe: This is a one - button installation service script
function CDAN(){
cat << yankerp
1.米饭
2.面条
3.包子
yankerp
}
CDAN
read -p 请您输入您今天要吃什么: NUM
expr $NUM + 1 &>/dev/null
if [ "$?" -ne 0 ]
 then
  echo "请您输入{1|2|3}"
  exit 1
fi 

case $NUM in
    1)
     echo "小二,来一碗米饭"
    ;;
    2)
     echo "小二,来一碗面条"
    ;;
    3)
     echo "小二,来一锅包子"
    ;;
esac 

剖析时刻:

#!/bin/bash
#!/bin/bash
# Date: 4:42 2018-2-5
# Mail: ywyankerp@163.com
# Founder: <YanKai>
# Describe: This is a one - button installation service script
function CDAN(){  #定义一个CDAN的函数
cat << yankerp
1.米饭
2.面条
3.包子
yankerp
}
CDAN       #调用CDAN函数
read -p 请您输入您今天要吃什么: NUM  #输入一条提示,然后把用户输入的字符串赋值给变量NUM
expr $NUM + 1 &>/dev/null     # 使用数值运算命令expr来确定用户输入的是否是数值
if [ "$?" -ne 0 ]         #如果用户输入的不是数值
 then      #那么
  echo "请您输入{1|2|3}"   #打印出 1 2 3
  exit 1       #最后退出脚本
fi        #结束if语句 

case $NUM in    #这里就是我们的case语句了,简单理解,在NUM这个变量中
    1)       #如果用户输入的是1
     echo "小二,来一碗米饭"    #那么就输出一行来一碗米饭
    ;;
    2)             #如果在NUM变量中用户输入的是2
     echo "小二,来一碗面条"  #那么继续打印此内容
    ;;
    3)              #以此类推
     echo "小二,来一锅包子"
    ;;
esac       #最后使用esac结束

觉得不够养眼?没有关系如下图:


我们发现,在多个选项的这些脚本中呢,还是使用case语句是比较方便合适的。

那么我们掌握了基本的语法和它的一些功能,那么我们可以结合函数+case语句来完成一个菜单式的安装脚本如下:

#!/bin/bash
# Date: 4:42 2018-2-5
# Mail: ywyankerp@163.com
# Founder: <YanKai>
# Describe: This is a one - button installation service script
function CDAN(){
cat << yankerp
+------------------------------------------------+
|                        |
|    _o0o_     1. 安装Nginx       |
|    08880     2. 安装Apache      |
|    88"."88     3. 安装MySQL       |
|    (|-_-|)     4. 安装PHP        |
|    0\=/0     5. 部署LNMP环境     |
|   __/  \__    6. 安装zabbix监控    |
|   ‘\  ///‘     7. 退出此管理程序    |
|  / Linux一键 \   8. 关闭计算机      |
| ||  Server  ||  ======================  |
| \    ////     一键安装服务      |
|  ||| i i i  |||        by Yankerp  |
|  ___    ___   ======================  |
|___‘. /--.--\ .‘___              |
+------------------------------------------------+
yankerp
}
CDAN
. /etc/init.d/functions
BASE_DIR=/usr/local/src
read -p "请您输入1-8任意字符:" NUM
expr $NUM + 1 &>/dev/null
if [ "$?" -ne 0 ]
 then
  echo "请您输入{1|2|3|4|5|6|7|8}"
  exit 1
fi 

function Nginx_server (){
  echo "开始安装Nginx请稍后...."
  yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel &>/dev/null
  cd $BASE_DIR && wget http://nginx.org/download/nginx-1.12.2.tar.gz &>/dev/null && useradd -M -s /sbin/nologin nginx && \
tar zxf nginx-1.12.2.tar.gz && cd $BASE_DIR/nginx-1.12.2/ && \
  ./configure --prefix=/usr/local/nginx --with-http_dav_module--with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module--with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx &>/dev/null
  if [ "$?" -eq 0 ]
   then
    make && make install &>/dev/null
  fi
if [ -f /usr/local/nginx/sbin/nginx ];then
  ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin && nginx && echo "Nginx安装成功!"
fi
} 

function Apache_server (){
  echo "开始安装Apache请稍后"
  yum install httpd -y &>/dev/null
  if [ "$?" -eq 0 ]
   then
    echo "Apache安装成功!"
   else
    echo "Apache安装失败!"
  fi
} 

case $NUM in
  1)
   Nginx_server
  ;;
  2)
   Apache_server
  ;;
esac 

运行结果如下:


以上脚本大家可以参考参考,很简单实现,那么接下来在来一个案例

实战2:编程Nginx启动脚本

编译安装的Nginx是没有启动脚本的,这时候我们可以选择自己写一个,在这里我用我的思路给大家解释整个过程虽然不是很规范,希望还是能够帮助到你如下:

#!/bin/bash
BASE_DIR=/usr/local/nginx/sbin/
PID=/usr/local/nginx/logs/nginx.pid
#no1.判断是否root用户登录
if [ "$UID" -ne 0 ]
 then
  echo "请您使用root用户登录!!!"
 exit 1
fi
. /etc/init.d/functions
#判断用户输入的传参个数
if [ "$#" -ne 1 ]
  then
    echo "/bin/bash $0 {start|stop|restart}"
  exit 1
fi 

#编写启动Nginx函数
function start (){
  if [ `netstat -anput | grep nginx | wc -l` -eq 0 ]
    then
     $BASE_DIR/nginx
  fi
    if [ "$?" -eq 0 ]
     then
      action "Nginx启动成功!" /bin/true
     else
      action "Nginx启动失败!" /bin/false
    fi
} 

#编写停止Nginx函数
function stop (){
  if [ `netstat -anput | grep nginx | wc -l` -ne 0 ]
    then
     $BASE_DIR/nginx -s stop
  fi
    if [ "$?" -eq 0 ]
     then
      action "Nginx停止成功!" /bin/true
     else
      action "Nginx停止失败!" /bin/false
    fi
} 

#编写case语句 使用特殊的位置变量$1来判断用户输入的内容
case $1 in
  start)
     start
  ;;
  stop)
     stop
  ;;
    restart)
     stop
     start
  ;;
esac 

运行如下:


一张图更清晰解释


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • linux shell流程控制语句实例讲解(if、for、while、case语句实例)

    一.shell条件语句(if用法) if语句结构[if/then/elif/else/fi] 复制代码 代码如下: if 条件测试语句 then action [elif 条件 action else action ] fi 如果对于:条件测试语句不是很清楚,可以参考:linux shell 逻辑运算符.逻辑表达式详解shell命令,可以按照分号分割,也可以按照换行符分割.如果想一行写入多个命令,可以通过"';"分割.如: 复制代码 代码如下: [chengmo@centos5 ~]$

  • shell脚本编程之case语句学习笔记

    case语句是用来实现多个if..else的功能的,但是用法上有些不同,学过其他语言的人都知道,case中要对变量进行匹配,如果有一个匹配成功的话就执行相应的语句.shell编程中的case语句也是这个意思,case会对字符串进行匹配,是从第一个模式开始的,如果有一个模式已经匹配成功的话,其他的模式就不会再进行匹配了,下面看下代码中的用法吧. #!/bin/sh echo "please yes or no" read input #case语句的基本用法,记住每一个匹配后边都有双分号

  • linux bash shell中case语句的实例

    bash case语句的例子. 分享一段bash shell代码,对于学习bash的同学理解case语句的用法,会有帮助. 例子: 复制代码 代码如下: #!/bin/bash### Program:# File operation# 1.) Open file 2.) Display file 3.) Edit file 4.) Delete file# site: WWW.JB51.NETPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/u

  • Shell脚本case语句简明教程

    Shell case语句为多选择语句.可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: 复制代码 代码如下: case 值 in 模式1)     command1     command2     ...     commandN     ;; 模式2)     command1     command2     ...     commandN     ;; esac case工作方式如上所示.取值后面必须为单词in,每一模式必须以右括号结束.取

  • Shell编程之case语句实战(小结)

    大家好,今天给大家带来的是Shell编程之case语句的使用! 其实case语句还是很好理解的,在shell编程中,if语句有它的语法,函数也有它的语法,那么在我们shell编程中的case语句也是有它的语法的,如下: case 变量名 in 值1) 指令1 ;; 值2) 指令2 ;; 值3) 指令3 ;; esac 在以上的代码中我们发现,以case开头,以esac结尾,就像我们的if语句,以if开头以fi结束时一样的. 例2: case "找老公条件" in 家里有房子) 嫁给你.

  • 详解Shell编程之if语句实战(小结)

    对于if语句,其实很多人都肯定的听说过,那么if语句到底是什么,简单的说,就类似于汉语里面的如果----那么,if语句是linux运维人员在实际环境中使用的最频繁也是最重要的语句!!! 一.if条件语句 1.单分支语句结构 第一种语法如下: if <条件表达式> then 指令 fi 第二种语法 if <条件表达式>; then 指令 fi 在以上这两种方式中我还是喜欢用第一种,这个是看个人习惯的.在上面的两个语法中<条件表达式>可以是 test [] [[]] (()

  • 对Linux下shell编程之for循环的实例讲解

    linux 下 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致 一.常用for循环结构 #语法一 for 变量 in 值1 值2 值3.. do 程序块儿 done # #语法二 for 变量 `命令` do 程序块儿 done # #语法三 for ((初始值; 循环控制; 变量变化)) do 程序块儿 done 二.常用测试结构 1. 输出3次uptime #!/bin/bash for i in 1 2 3 4 5 do echo "$i

  • mysql存储过程之case语句用法实例详解

    本文实例讲述了mysql存储过程之case语句用法.分享给大家供大家参考,具体如下: 除了if语句,mysql提供了一个替代的条件语句CASE. mysql的 CASE语句使代码更加可读和高效.废话不多说,我们先来看下简单case语句的语法: CASE case_expression WHEN when_expression_1 THEN commands WHEN when_expression_2 THEN commands ... ELSE commands END CASE; 我们可以使

  • Shell编程之/bin/bash和/bin/sh的区别浅析

    目录 前言 正题 注意 补充:docker容器使用/bin/bash命令 总结 前言 早期,学过shell的5种启动方式,学的没有那么深入.从而导致了想深究一下docker exec 命令为什么tomcat容器用/bin/bash,nginx容器却用/bin/sh,被这个问题,折腾了半天! 从/bin/bash,就是进入不了nginx容器,由此引发了一系列的排查.如果你对,docker的这个错误感兴趣,点击进入. 正题 简单的讲,/bin/sh是早期版本,是一种便携方式的解释性脚本语言,自带有p

  • Java协程编程之Loom项目实战记录

    目录 前提 Loom项目简单介绍 Virtual Thread使用 小结 前提 之前很长一段时间关注JDK协程库的开发进度,但是前一段时间比较忙很少去查看OpenJDK官网的内容.Java协程项目Loom(因为项目还在开发阶段,OpenJDK给出的官网https://openjdk.java.net/projects/loom中只有少量Loom项目相关的信息)已经在2018年之前立项,目前已经发布过基于JDK17编译和JDK18编译等早期版本,笔者在下载Loom早期版本的时候只找到JDK18编译

  • shell脚本编程之for语句、if语句使用介绍

    上部: 面向过程:顺序执行选择执行: if, case循环执行: for, while, until 一.for语句 格式:     for 变量 in 列表;do        语句1;        语句2;        ...     done    例1.写一个脚本,添加10个用户,并让每个用户的密码同用户名] 复制代码 代码如下: #!/bin/bash       for I in {1..10}; do          useradd user$I;       echo us

  • shell脚本编程之if语句学习笔记

    我不是研究linux下的东西的,所以这里只对shell脚本的用法做一个介绍,把我自己在使用过程中出现的问题记录下来,同时也是写下一些shell脚本语法的规则,方便以后查看.先来学习一下条件语句if的用法,通过这一个简单的语法来说明一下shell脚本编程时候的东西. 复制代码 代码如下: #!/bin/sh echo "please input text1" read text1 echo "please input text2" read text2 #判断字符串等

  • Shell编程之Shell变量学习总结

    一.变量操作 A.变量显示.打印语法:echo $varB.变量设置语法:var=value 变量的设置规则:1.变量两端不能直接接空格符2.变量名称只能是因为字母与数字,但开头不能使数字3.双引号内的特殊字符如$等,保持原本特性 复制代码 代码如下: [root@bogon ~]# var="lang is $LANG"[root@bogon ~]# echo %varroot@bogon ~]# echo $varlang is zh_CN.UTF-8 1. 单引号内的特殊字符则仅

随机推荐