侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

技术  /  管理员 发布于 7年前   136

大家好,今天给大家带来的是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: [email protected] # 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: [email protected] # 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: [email protected] # 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: [email protected] # 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 

运行如下:


一张图更清晰解释


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


  • 上一条:
    一些你必须要熟练掌握的git命令
    下一条:
    详解Shell编程之if语句实战(小结)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客