shell&case语句

简介: 流程控制语句-case用来实现程序流程的选择、循环等进行控制,类似于if,但更具准确性一般用于服务的启动、停止脚本

前言

流程控制语句-case

   用来实现程序流程的选择、循环等进行控制,类似于if,但更具准确性

   一般用于服务的启动、停止脚本


语法

               case 变量 in

                                   变量1)

                                               命令序列1;;

                                   变量2)

                                               命令序列2;;

                                   变量3)

                                               命令序列3;;


               esac


案例展示

     菜单选项

     if语句方式      

im if1.sh
#!/bin/bash
cat <<EOF
---------
1.backup 
2.copy
3.quit
---------
EOF
read -p "请输入你的选项[1|2|3]:" In
if [ $In -eq 1 ];then
  echo "---backup done---"
elif [ $In -eq 2 ];then
  echo "---copy done---"
elif [ $In -eq 3 ];then
  echo "---quit done---"
else
  echo "请输入【1|2|3】"
fi

 case语句 精准

vim case1.sh
#!/bin/bash
cat <<EOF
---------
1.backup 
2.copy
3.quit
---------
EOF
read -p "请输入你的选项[1|2|3]:" In
case $In in
  1)
    echo "---backup---"
    ;;
  2)
    echo "---copy---"
    ;;
  3)
    echo "---quit---" && exit
    ;;
  *)
    echo "注意..."
    echo "USAGE: $0 {1|2|3}"
    exit
esac

rsync服务启动停止脚本

       思路:

           rsync的启动命令: rsync --daemon

           rsync的停止命令: pkill rsync

方法一:if语句

vim if2.sh
#!/bin/bash
source /etc/init.d/functions
if [ $1 == "start" ];then
  rsync --daemon
  action "rsync starting..." /bin/true
elif [ $1 == "stop" ];then
  pkill rsync
  action "rsync stoping..." /bin/true
else
  echo "USAGE: $0 {start|stop}"
  exit 
fi

方法2:case语句更合适

vim case2.sh  
#!/bin/bash
source /etc/init.d/functions
case $1 in 
  start)
    if [ ! -f /var/run/rsync.pid ];then
      touch /var/run/rsync.pid
      rsync --daemon
      action "rsync starting..." /bin/true
    else
      action "rsync service running..." /bin/false
    fi
    ;;
  stop)
      rm -f /var/run/rsync.pid
      pkill rsync
      action "rsync stopping..." /bin/true      
    ;;
  status)
    if [ ! -f /var/run/rsync.pid ];then
      echo "rsync service status InActive..."
    else
      rsync_status=$(ps aux |grep rsync | grep -v grep |awk '{print $2}')
      echo "rsync service status Active("$rsync_status")"
    fi
    ;;
  *)
    echo "USAGE: $0 {start|stop|status}"
    exit
esac

nginx服务启动停止脚本

       思路:    

           如何启动 /usr/sbin/nginx

           如何停止 /usr/sbin/nginx -s stop

           如何重载

vim case3.sh 
#!/bin/bash
source /etc/init.d/functions
case $1 in
  start)
    if [ -f /var/run/nginx.pid ];then
      action "nginx服务已启动..." /bin/false
      exit
    else
      /usr/sbin/nginx
      action "nginx服务启动成功..." /bin/true
    fi
    ;;
  stop)
    if [ -f /var/run/nginx.pid ];then
      /usr/sbin/nginx -s stop 
      if [ $? -eq 0 ];then
        action "nginx服务关闭成功..." /bin/true
      else
        action "nginx服务关闭失败..." /bin/false
      fi
    else
      action "nginx服务已经关闭..." /bin/false  
    fi
    ;;
  reload)
    if [ -f /var/run/nginx.pid ];then
      /usr/sbin/nginx -s reload
      if [ $? -eq 0 ];then 
        action "nginx重载成功..." /bin/true
      else
        action "nginx重载失败..." /bin/false
      fi
    else
      action "nginx没有启动,无法完成重载" /bin/false
    fi
    ;;
  status)
    if [ -f /var/run/nginx.pid ];then
      nginx_pid=$(cat /var/run/nginx.pid)
      echo "nginx ( $nginx_pid ) is running..."
    else
      echo "nginx is not running..."
    fi
    ;;
  *)
    echo "USAGE: $0 {start|stop|status}"

实现系统工具箱

vim case4.sh
#!/bin/bash
cat <<EOF
----------
h 显示命令帮助
f 显示分区使用
d 显示磁盘挂载
m 查看内存使用
u 查看cpu负载
q 退出
----------
EOF
read -p "请输入你的选项:" SZ
case $SZ in 
  f)
    df -hT
    ;;
  d)
    mount | more
    ;;
  m)
    free -h
    ;;
  u)
    uptime
    ;;
  q)
    exit
    ;;
  *)
    echo "USAGE: $0 【h|f|d|m|u|q】"
esac

服务器之间的ssh互访

ssh 命令: ssh root@192.168.8.6

              用户   ip地址

在脚本中需要使用密钥方式访问

原理:生成一对密钥:1个公钥  1个私钥 将公钥放到目的端

公钥加密、私钥解密叫”认证“

第一步:生成一对密钥  ssh-keygen

(密钥在/root/.ssh 名字:id_rsa 私钥  id_rsa.pub 公钥)

第二步:将公钥拷贝目的端  ssh-copy-id root@192.168.8.6


实现简单的jumpserver跳板机

       思路:

           需要看到所有能管理的主机

           选择菜单,提示输入某个主机

vim case5.sh  
#!/bin/bash
Menu(){
cat <<EOF
---------------
1.web1-192.168.8.20
2.web2-192.168.8.21
3.mysql1-192.168.8.100
4.mysql2-192.168.8.101
h.help
---------------
EOF
}
Menu
read -p "请输入你要连接的主机序号:" CONN
case $CONN in
  1)
    ssh root@192.168.8.20
    ;;
  2)
    ssh root@192.168.8.21
    ;;
  3)
    ssh root@192.168.8.100
    ;;
  4)  
    ssh root@192.168.8.101
    ;;
  h)
    clear
    Menu
    ;;
  *)
    echo "USAGE: $0 输入要连接的主机序号 【1|2|3|4】"
esac    

               



相关文章
|
Shell
shell学习(六) 【case多条件分支语句】
shell学习(六) 【case多条件分支语句】
242 1
|
Shell
Shell脚本中的`case`语句
Shell脚本中的`case`语句
337 5
|
Shell Linux iOS开发
Shell的`case`语句
Shell的`case`语句
147 2
|
Shell
shell编程之条件语句与case语句
shell编程之条件语句与case语句
109 2
|
运维 Shell 应用服务中间件
【运维知识高级篇】超详细的Shell编程讲解3(if判断+Shell菜单+case流程判断+批量创建删除用户+猜数字小游戏)
【运维知识高级篇】超详细的Shell编程讲解3(if判断+Shell菜单+case流程判断+批量创建删除用户+猜数字小游戏)
311 1
|
Shell
Shell脚本:case语句
Shell脚本:case语句
153 1
|
Shell
shell之case范例1
shell之case范例1
104 1
|
Shell
Shell case 语法简单案例
Shell case 语法简单案例
113 0
|
NoSQL Shell Redis
RHCE的一道shell脚本编程题&理解shell case 语法
RHCE的一道shell脚本编程题&理解shell case 语法
170 0
|
Shell
shell之case用法
shell之case用法
167 0