前言
流程控制语句-case
用来实现程序流程的选择、循环等进行控制,类似于if,但更具准确性
一般用于服务的启动、停止脚本语法
case 变量 in
变量1)
命令序列1;;
变量2)
命令序列2;;
变量3)
命令序列3;;esac
案例展示
菜单选项
if语句方式
vim 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}" esac
实现系统工具箱
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