(3.6)Case用法
原创
©著作权归作者所有:来自51CTO博客作者喜欢打篮球的普通人的原创作品,请联系作者获取转载授权,否则将追究法律责任
文章目录
- 1.case语法结构
- 2.case实现jump Server
- 3.case实现简单的系统工具箱
1.case语法结构
- 模式匹配case
- 语法结构,相当于if。。。。。。elif。。。。else。。。。
case语句是从上往下执行的
case 变量 in
模式1)
命令序列
;;
模式1)
命令序列
;;
模式1)
命令序列
;;
*)
无匹配后命令序列
esac
#!/usr/bin/bash
#yum config case
yum_server=10.8.40.100
os_vrsion=`cat /etc/redhat-release|awk '{print $4}' \
|awk -F"." '{print $1"."$2}'`
[-d /etc/yum.repos.d] || mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.d /etc/yum.repos.d/bak &>/dev/null
case "$os_version" in ##变量的值去匹配哪个,字符串匹配
7.3)## "7.3"也可以
cat >/etc/yum.repos.d/centos7u3.repo<<-EOF
[centos7u3]
name=centos7u3
baseurl=ftp://$yum_server/centos7u3
gpgcheck=0
EOF
echo "7.3 yum configure.."
;;
6.8)
curl -o /etc/yum.repos.d/centos6u8.repo ftp://$yum_server/centos6u8.repo
;;
5.9)
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirros.aliyun.com/repo/Cetos-5.repo
;;
*)
echo "error"
esac
执行:
sh -n yumconfig.sh
#!/usr/bin/bash
#delete user
#v1.0 by jiwang 2020-2-17
read -p "input a username: " user
id $user &>/dev/null
if [ $? -ne 0 ];then
echo "no such user: $user"
exit 1 ##这里的1随便定义
fi
read -p "Are you sure?[y/n]: " action
if [ "${action}" == "y" -o "${action}" == "Y" ];then
userdel -r $user
echo "$user is deleted"
else
echo "good!"
exit 2
fi
===================================================================================
#!/usr/bin/bash
#delete user
#v1.0 by jiwang 2020-2-17
read -p "input a username: " user
id $user &>/dev/null
if [ $? -ne 0 ];then
echo "no such user: $user"
exit 1 ##这里的1随便定义
fi
read -p "Are you sure?[y/n]: " action
case "$action" in
y|Y|yes)
userdel -r $user
echo "$user is deleted"
;;
*)
echo "error"
esac
#!/usr/bin/bash
command1=/bin/date
if command -v $command &>/dev/null;then
:
else
yum -y install ..
fi
是命令的话,啥都不做,可以用:表示,:就是true
2.case实现jump Server
- 要求:只对跳板机提供远程连接端口,shell脚本的大致框架如下:
(1)打开个菜单
(2)echo和read加个提示
(3)判断变量的值 - eg代码如下:从跳板机到后面的机器采用密码验证登录
在三个服务器上,分别临时修改主机名:hostname web1 hostname web2 hostname mysql1
在三个服务器和跳板机上,分别增加用户名:
useradd alice
passwd alice
su - alice
===================================================================================
在跳板机上操作:
vim jumpserver.sh
#!/usr/bin/bash
#jumpserver
web1=192.168.122.241
web2=192.168.122.52
mysql=192.168.122.210
clear
while :
do
#打印
cat <<-EOF
1. web1
2. web2
3. mysql1
EOF
read -p "input number: " num
case "$num" in
1)
ssh alice@$web1
;;
2)
ssh alice@$web2
;;
3)
ssh alice@$mysql1
;;
"") ##啥也不干,'')也行
echo "error"
esac
done
- eg:eg代码如下:从跳板机到后面的机器采用密钥验证登录
以alice为主机名进行操作:
ssh-keygen
全都输入空格,产生公钥和私钥
ll .ssh/
ssh-copy-id 192.168.122.52
ssh-copy-id 192.168.122.210
ssh-copy-id 192.168.122.241
执行上面脚本:
sh jumpserver.sh
- 从远程10.18.42.101登录到跳板机,执行的结果如下:
- 在跳板机上,将该jumpserver.sh脚本的绝对路径放到.bash_profile中,使得脚本自启动
- trap捕捉信号,继续上面的eg去写
##trap捕捉信号,没有做什么操作,防止脚本退出,使得crl C没用
#!/usr/bin/bash
#jumpserver
trap "" HUP INT OUIT TSTP
web1=192.168.122.241
web2=192.168.122.52
mysql=192.168.122.210
。。。。。
。。。。。。
- echo打印有颜色的字体时,是换行的,-n参数可以不换行,继续上面的eg去写
。。。
EOF
echo -en "\e[1;32minput number: \e[0m"
read num
case 。。。。
。。。
3.case实现简单的系统工具箱
- 工具箱类似如下:
- eg:前面的大端提示打印的话,用cat或者echo或者printf去打印
vim system_manager.sh
#!/usr/bin/bash
#system manager
#v1.0 by jiwang 2020-2-18
##函数为了能重复的调用
menu()
{
cat <<-EOF
################################
# h. help
# f. disk partition
# d. filesysytem mount
# m. memory
# u. sysytem load
# q. exit
################################
EOF
}
menu
while : ##死循环 while [ 1 == 1 ] 或者 while true
do
read -p "Please input[h for help]: " action
##接着做模式匹配
case "$action" in
h)
clear
menu
;;
f)
fdisk -l
;;
d)
df -Th
;;
m)
free -m ##按Mbit显示
;;
u)
uptime
;;
q)
exit ##exit跳出程序。。。。。。break跳出循环
;;
"") ##输入为空
;;
*)
echo "error"
esac
done
echo "finish...."###使用break会执行