shell图形化跳板机
在CentOS6系统中,我们可以使用setup
指令来修改网卡的IP等信息,交互起来十分方便
在CentOS7系统中,setup
命令已经没有了,但是还有nmtui
命令,可以让我们修改IP和主机名。
那么whiptail
命令的作用,就是出现一个可以交互的图形化界面,并且样式有很多。
信息框
#!/bin/bash
#信息框
whiptail --title "跳板机 $HOSTNAME Disk Info" --msgbox "`df -h`" 30 80
whiptail 就是出现一个可以交互的图形化界面
--title # 指定标题内容 跳板机 $HOSTNAME Disk Info
-- msgbox #指定信息内容 `df -h`
30 # 展示信息的高度为30
80 # 展示信息的宽度为80
返回值
#!/bin/bash
#信息框
whiptail --title "跳板机 $HOSTNAME Disk Info" --msgbox "`df -h`" 30 80
echo $?
布尔值的选择框
#!/bin/bash
#信息框
whiptail --title "跳板机 $HOSTNAME Disk Info" --yesno '请输入你的选择 YES or NO' 30 80
if [ $? -eq 0 ];then
echo '你选择的是yes'
else
echo '你选择的是no'
fi
#!/bin/bash
#信息框
whiptail --title "选择你的岗位" --yes-button 'ops' --no-button 'dev' --yesno '请选择' 30 80
if [ $? -eq 0 ];then
echo '你选择的是ops'
else
echo '你选择的是dev'
fi
--title # 指定标题内容
--yes-button # yes的按钮可以改名
--no-button # no的按钮可以改名
--yesno # 布尔值框 后面可以是追加框内的内容
交互式输入框
whiptail --title <标题> --inputbox "<信息>" 高度 宽度 默认值
#!/bin/bash
#信息框
whiptail --title "jump server" --inputbox '请输入一个文件路径' 20 50
3>&1 1>&2 2>&3
#!/bin/bash
#交互输入框
source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`
echo $source_file $dest_file
scp $source_file 172.16.1.7:$dest_file
#!/bin/bash
#交互输入框
source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`
source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
scp $source_file 172.16.1.7:$dest_file
else
echo '请输入一个文件路径'
fi
else
echo ' 请输入一个源文件路径'
fi
密码输入框
#!/bin/bash
#交互输入框
passwd=`whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
echo $passwd
else
echo '取消了选择'
fi
passwd=`whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
if [ ${#passwd} -ne 0 ];then
echo "密码是 $passwd"
else
echo '密码为空'
fi
else
echo '取消选择'
fi
[root@web02 ~]# sh tutb.sh
密码为空
[root@web02 ~]# sh tutb.sh
取消选择
菜单栏
whiptail --title<标题> --menu"<信息>" 高度宽度 页面显示个数
# 执行结果
ok是0
cencel是1
# 五个选项 页面显示4个个数会出现滚轮 写反斜需要空格衔接
#!/bin/bash
whiptail --title "jump" --menu "根据菜单选择" 30 60 4 \
"1" "lb01" \
"2" "lb02" \
"3" "web01" \
"4" "web02" \
"5" "web03" 3>&1 1>&2 2>&3
#!/bin/bash
whiptail --title "jump" --menu "根据菜单选择" 30 60 5 \
"1" "lb01 10.0.0.5" \
"2" "lb02 10.0.0.6" \
"3" "web01 10.0.0.7" \
"4" "web02 10.0.0.8" \
"5" "web03 10.0.0.9" 3>&1 1>&2 2>&3
#!/bin/bash
res=`whiptail --title "jump" --menu "根据菜单选择" 30 60 5 \
"1" "lb01 10.0.0.5" \
"2" "lb02 10.0.0.6" \
"3" "web01 10.0.0.7" \
"4" "web02 10.0.0.8" \
"5" "web03 10.0.0.9" 3>&1 1>&2 2>&3`
echo $res
# echo执行结果为选项结果
单选框
# 语法
whiptail --title "jump" --radiolist "信息" 高度 宽度 页面显示个数
#!/bin/bash
whiptail --title "jump" --radiolist "请在下面选择一项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3
tab键可以选择ok或者cancel 空格可以进行单选框选择 方向键可以上下移动
# 返回值
ok是0
cancel是1
#!/bin/bash
res=`whiptail --title "jump" --radiolist "请在下面选择一项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3`
echo $res
复选框
whiptail --title "jump" --checklist"<信息>" 高度 宽度 页面显示个数
#!/bin/bash
res=`whiptail --title "jump" --checklist "请在下面选择一项或多项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3`
echo $res
#!/bin/bash
res=$(whiptail --title "jump" --checklist "请在下面选择一项或多项" 30 80 4 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3)
echo ${res//\"}
echo $res|sed 's#"##g'
for n in $res;do
if [ ${n//\"/} == "send" ];then
echo '发送文件'
elif [ ${n//\"/} == "useradd" ];then
echo '创建用户'
elif [ ${n//\"/} == "ssh" ];then
echo '远程连接'
elif [ ${n//\"/} == "mem" ];then
echo '查看内存'
fi
done
# 去除引号的方法
echo ${res//\"}
或
echo $res|sed 's#"##g'
或
for n in $res;do
if [ ${n//\"/} == "send" ];then
echo '发送文件'
elif [ ${n//\"/} == "useradd" ];then
echo '创建用户'
elif [ ${n//\"/} == "ssh" ];then
echo '远程连接'
elif [ ${n//\"/} == "mem" ];then
echo '查看内存'
fi
done
进度条
{
for ((i = 0 ; i <= 100 ; i+=30)); do
sleep 1
echo $i
done
} | whiptail --gauge "等一下子,正在安装" 6 60 0
图形化跳板机
推送免密密钥
# 生成密钥
ssh-keygen -t rsa
# 推送密钥(m01推向其他机器)
ssh-copy-id user@hostname
# 例
ssh-copy-id root@172.16.1.7
主界面
vim txtbj.sh
#登陆用户
yonghu=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择登陆的用户" 30 60 10 \
"1" "ops" \
"2" "dev" \
"3" "test" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $yonghu in
1)
echo "欢迎运维人员"
sh yw_xz.sh
;;
2)
echo "欢迎开发人员"
sh kf_xz.sh
;;
3)
echo "欢迎测试人员"
sh cs_xz.sh
;;
esac
else
echo "取消了登陆"
exit
fi
运维跳板机菜单
vim yw_tbj.sh
#运维跳板机菜单栏
lb01=172.16.1.5
lb02=172.16.1.6
web01=172.16.1.7
web02=172.16.1.8
web03=172.16.1.9
nfs=172.16.1.31
backup=172.16.1.41
db01=172.16.1.51
db02=172.16.1.52
zabbix=172.16.1.71
option=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择接下来的操作" 30 60 10 \
"1" "lb01" \
"2" "lb02" \
"3" "web01" \
"4" "web02" \
"5" "web03" \
"6" "nfs" \
"7" "backup" \
"8" "db01" \
"9" "db02" \
"10" "zabbix" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $option in
1)
ssh root@$lb01
;;
2)
ssh root@$lb02
;;
3)
ssh root@$web01
;;
4)
ssh root@$web02
;;
5)
ssh root@$web03
;;
6)
ssh root@$nfs
;;
7)
ssh root@$backup
;;
8)
ssh root@$db01
;;
9)
ssh root@$db02
;;
10)
ssh root@$zabbix
;;
esac
else
echo "取消了选择"
exit
fi
开发跳板机菜单
vim kf_tbj.sh
#!/bin/bash
#开发跳板机菜单栏
web01=172.16.1.7
web02=172.16.1.8
web03=172.16.1.9
option=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择接下来的操作" 30 60 10 \
"1" "web01" \
"2" "web02" \
"3" "web03" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $option in
1)
ssh root@$web01
;;
2)
ssh root@$web02
;;
3)
ssh root@$web03
;;
esac
else
echo "取消了选择"
exit
fi
测试跳板机菜单
vim cs_tbj.sh
#!/bin/bash
#测试跳板机菜单
lb01=172.16.1.5
lb02=172.16.1.6
option=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择接下来的操作" 30 60 10 \
"1" "lb01" \
"2" "lb02" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $option in
1)
ssh root@$lb01
;;
2)
ssh root@$lb02
;;
esac
else
echo "取消了选择"
exit
fi
输入密码并进入选择界面
vim yw_xz.sh
#!/bin/bash
#交互输入框
password=$(whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
if [ ${#password} -ne 0 ];then
grep -wq "^$password" yw_mima.txt
#运维选择界面
xuanzhe=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择操作" 30 60 10 \
"1" "传输文件" \
"2" "登陆跳板机" \
"3" "查看服务器信息" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $xuanzhe in
1)
sh chuanshu.sh
;;
2)
sh yw_tbj.sh
;;
3)
sh xinxi.sh
;;
esac
else
echo "取消了选择"
fi
else
echo "账号或密码错误"
fi
else
echo '取消了选择'
fi
vim cs_xz.sh
#!/bin/bash
#交互输入框
password=$(whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
if [ ${#password} -ne 0 ];then
grep -wq "^$password" cs_mima.txt
#测试选择界面
xuanzhe=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择操作" 30 60 10 \
"1" "传输文件" \
"2" "登陆跳板机" \
"3" "查看服务器信息" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $xuanzhe in
1)
sh chuanshu.sh
;;
2)
sh cs_tbj.sh
;;
3)
sh xinxi.sh
;;
esac
else
echo "取消了选择"
fi
else
echo "账号或密码错误"
fi
else
echo '取消了选择'
fi
vim kf_xz.sh
#!/bin/bash
#交互输入框
password=$(whiptail --title 'jump' --passwordbox "请输入密码:" 10 60 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
if [ ${#password} -ne 0 ];then
grep -wq "^$password" kf_mima.txt
#测试选择界面
xuanzhe=$(whiptail --title "跳板机-10.0.0.61" --menu "根据菜单选择操作" 30 60 10 \
"1" "传输文件" \
"2" "登陆跳板机" \
"3" "查看服务器信息" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $xuanzhe in
1)
sh chuanshu.sh
;;
2)
sh kf_tbj.sh
;;
3)
sh xinxi.sh
;;
esac
else
echo "取消了选择"
fi
else
echo "账号或密码错误"
fi
else
echo '取消了选择'
fi
传输界面
vim chuanshu.sh
#!/bin/bash
#选择服务器地址
jump_server=$(whiptail --title "Jump Server" --inputbox "请输入目标服务器IP:" 10 50 3>&1 1>&2 2>&3)
if [ $? -ne 0 ];then
echo "取消了连接"
fi
#交互输入框
source_file=`whiptail --title "jump server" --inputbox "请输入一个文件路径" 20 50 例:/etc/passwd 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
dest_file=`whiptail --title "jump server" --inputbox "请输入一个对端存放路径" 20 50 例:/opt 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
scp $source_file $jump_server:$dest_file
if [ $? -eq 0 ];then
echo "文件传输成功"
else
echo "文件传输失败,请检查输入的文件路径与服务器配置"
fi
else
echo "请输入一个文件路径"
fi
else
echo "请输入一个源文件路径"
fi
查看信息界面
vim xinxi.sh
#!/bin/bash
#选择服务器地址
jump_server=$(whiptail --title "Jump Server" --inputbox "请输入目标服务器IP:" 10 50 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
echo "取消了连接"
fi
#信息框
whiptail --title "跳板机 $jump_server Disk Info" --msgbox "`ssh root@$jump_server df -h`" 30 80