shell&case语句

前言

流程控制语句-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		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值