• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
2022
博客园    首页    新随笔    联系   管理    订阅  订阅

linux12shell编程 -->流程控制之case

文章目录

    • 流程控制之case语句
      • 一 、语法
      • 二、 案例
        • 案例1
        • 案例2:编写nginx启动脚本
        • 案例3:编写nginx启动脚本
        • 案例4:编写一个简易跳板机脚本

流程控制之case语句

一 、语法

case 变量 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
模式3)
	命令序列3
	;;
*)
	无匹配后命令序列
esac

二、 案例

案例1

[root@openvpn day3]# cat check_role.sh 
#! /bin/bash

read -p "please input you name:" name
if [ -z "$name" ];then
    name="default"
fi
case $name in
"root")
    echo "管理员"
    ;;
"mm")
    echo "普通"
    ;;
"default")
    echo "默认用户"
    ;;
*)
  echo "防客"
esac

案例2:编写nginx启动脚本

[root@egon shell]# cat nginx_stat.sh 
#!/bin/bash

. /etc/init.d/functions
if [ $# -ne 1 ]
   then
      echo "USAGE $0 {start|stop|restart}"
      exit 1
fi


if [ "$1" == "start" ]
   then 
      action "start nginx" /bin/true
elif [ "$1" == "stop" ]
   then
      action "stop nginx" /bin/true
elif [ "$1" == "restart" ]
   then
      action "restart nginx" /bin/true
else
      echo "USAGE $0 {start|stop|restart}"
      exit 1
fi
    
[root@egon shell]# chmod +x nginx_stat.sh 
[root@egon shell]# ./nginx_stat.sh start
start nginx                                                [  确定  ]
[root@egon shell]# ./nginx_stat.sh restart
restart nginx                                              [  确定  ]
[root@egon shell]# ./nginx_stat.sh 
USAGE ./nginx_stat.sh {start|stop|restart}

案例3:编写nginx启动脚本

# 储备知识1
netstat -lntup|grep  ":80\b"  # \b锚定单词的结尾

# 储备知识2
action:打印一段信息并执行给定的命令,然后根据给定命令的执行的结果来调用 success,failure方法,确定最终显示的内容
 
[root@egon shell]# action "nginx start is" :
nginx start is                                             [  确定  ]
[root@egon shell]# action "nginx start is" /bin/true
nginx start is                                             [  确定  ]
[root@egon shell]# action "nginx start is" /bin/false
nginx start is                                             [失败]


# 代码
[root@egon shell]# cat nginx_stat.sh 
#!/bin/bash

. /etc/init.d/functions
args=$1

fun(){
    [ $? -eq 0 ] && action "Nginx $args is " /bin/true  || echo "Nginx $args is " /bin/false 
}

case $1 in
   start)
       netstat -an | grep -i Listen | grep -q "\b80\b"
       if [ $? -eq 0 ]
       then 
          echo "Nginx is runing..."
       else
           /usr/sbin/nginx
           fun
       fi
       ;;
   stop)
       /usr/sbin/nginx -s stop
       fun
       ;;
   reload)
       /usr/sbin/nginx -s reload
       fun
       ;;
  restart)
       netstat -lntup|grep  ":80\b" &>/dev/null
       if [ $? -ne 0 ]
       then
          /usr/sbin/nginx
          [ $? -eq 0 ] && echo "Nginx start is ok" || echo "Nginx start is failed"
       else
          /usr/sbin/nginx -s stop                             
          [ $? -eq 0 ] && echo "Nginx stop is ok" || echo "Nginx stop is failed"
          sleep 2
          /usr/sbin/nginx 
          fun 
       fi
       ;;
   status)
       netstat -lntup|grep  ":80\b" &>/dev/null
       if [ $? -eq 0 ]
       then
          echo "Nginx is runing ..."
       else
          echo "Nginx is not runing ..."
       fi
       ;;
    *)
        echo "Usage: $0 {start|stop|status|restart|reload}"
        exit 2
esac

# 方式二
# 使用if判断,编写nginx启动脚本,支持stop|start|reload

[root@openvpn day3]# cat nginx.sh 
#!/bin/bash
. /etc/init.d/functions

# nginx -s stop 停止
# nginx 启动
# nginx -s reload 重载

read -p "请输入操作模式(stop|start|reload)" nginx_start
if [[ $nginx_start == "start" ]];then
	nginx
	if [ $? -eq 0 ];then
		action "Nginx启动成功" /bin/true
	else
		action "Nginx启动失败" /bin/false
	fi
elif [[ $nginx_start == "stop" ]];then
	nginx -s stop
	if [ $? -eq 0 ];then
		action "Nginx关闭成功" /bin/true
	else
		action "Nginx关闭失败" /bin/false
	fi
elif [[ $nginx_start == "reload" ]];then
	nginx -s reload
	if [ $? -eq 0 ];then
		action "Nginx重载成功" /bin/true
	else
		action "Nginx重载失败" /bin/false
	fi
else
	echo "输入的操作模式错误,请使用操作模式(stop|sta
fi

方式三:
使用case判断,编写nginx启动脚本,支持stop|start|reload
[root@openvpn day3]# cat nginx.case.sh 
. /etc/init.d/functions

# nginx -s stop 停止
# nginx 启动
# nginx -s reload 重载

read -p "请输入操作模式(stop|start|reload)" nginx_start
case $nginx_start in
start)
        nginx
        case $? in
        0)
                action "Nginx启动成功" /bin/true
        ;;
        *)
                action "Nginx启动失败" /bin/false
        ;;
        esac
;;
stop)
        nginx -s stop
        case $? in
        0)
                action "Nginx关闭成功" /bin/true
        ;;
        *)
                action "Nginx关闭失败" /bin/false
        ;;
        esac
;;
reload)
        nginx -s reload
        case $? in
        0)
                action "Nginx重载成功" /bin/true
        ;;
        *)
                action "Nginx重载失败" /bin/false
        ;;
        esac
;;
*)
        echo "输入的操作模式错误,请使用操作模式(stop|start|reload)"
;;
esac

案例4:编写一个简易跳板机脚本

# 储备知识
Linux中断信号区别为:键入不同、对应操作不同、启用不同。

1、HUP中断信号:HUP中断信号的对应操作为让进程挂起,睡眠。同<Ctrl+X>

2、INT中断信号:INT中断信号的对应操作为正常关闭所有进程。同<Ctrl+C>

3、TERM中断信号 15:TERM中断信号的对应操作为正常的退出进程。

4、KILL中断信号 9:KILL中断信号的对应操作为强制关闭进程。

5、STOP 19暂停(同 Ctrl + Z)

6、CONT 18继续(与STOP相反, fg/bg命令)

7、TSTP中断信号:TSTP中断信号的对应操作为暂时停用进程。


# 代码
[root@egon shell]# cat jumpserver.sh 
#!/bin/bash
    
cat<<EOF
1. BACKUP 192.168.15.41

2. WEB02  192.168.15.8
3. WEB03  192.168.15.9
EOF
trap "echo 不要乱按键盘,否则服务器将会爆炸" HUP INT TSTP

while true
do
    read -p "请输入连接主机编号信息: " num
    read -p "请输入账号: " user
    # read -p "请输入要执行的命令: " cmd
    case $num in
       1)
           ssh $user@192.168.15.61
           [ $? -ne 0 ] && echo "connect faild"
           ;;
       2)
           ssh $user@192.168.15.41
           [ $? -ne 0 ] && echo "connect faild"
           ;;
       *)
           echo "请输入连接主机信息"
    esac
done 
# 方式二
[root@openvpn day3]# cat jump.sh 
#!/bin/bash
docter=192.168.15.101
while true
    read -p "请输入账号: " user
do
       ssh $user@$docter
      
      if [ $? -eq 0 ];then
          echo "connect faild"
      else
          echo "请输入连接主机信息"
      fi
done
posted @ 2021-06-15 22:21  博客之记  阅读(82)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3