流程控制之case语句

时间:2021-08-10 13:55来源:未知 作者:中博IT教育

流程控制之case语句 一 语法 case 变量 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; 模式3) 命令序列3 ;; *) 无匹配后命令序列 esac ##二 案例 案例1 #!/bin/bash read -p username: -t 5 username echo if [ -z
流程控制之case语句
一 语法
case 变量 in
模式1)
 命令序列1
 ;;
模式2)
 命令序列2
 ;;
模式3)
 命令序列3
 ;;
*)
 无匹配后命令序列
esac
##二 案例
 
案例1
 
#!/bin/bash
read -p "username: " -t 5 username
echo
if [ -z $username ];then
    username="default"
fi
 
case $username in
root)
    echo "管理员用户"
    ;;
egon)
    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 -lntup|grep  ":80\b" &>/dev/null
       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
案例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 10.0.0.41
2. WEB02  192.168.12.21
3. WEB03  10.0.0.9
EOF
trap "echo 不要乱按键盘,否则服务器将会爆炸" HUP INT TSTP
 
while true
do
    read -p "请输入连接主机编号信息: " num
    read -p "请输入账号: " user
    case $num in
       1)
           ssh $user@10.0.0.41
           [ $? -ne 0 ] && echo "connect faild"
           ;;
       2)
           ssh $user@192.168.12.21
           [ $? -ne 0 ] && echo "connect faild"
           ;;
       *)
           echo "请输入连接主机信息"
    esac
done 
(责任编辑:中博IT教育)

苏公网安备 32030302000649号