图形化跳板机模块
shell 图形化跳板机
whiptail
在CentOS6系统中,我们可以使用setup
指令来修改网卡的IP等信息,交互起来十分方便
在CentOS7系统中,setup
命令已经没有了,但是还有nmtui
命令,可以让我们修改IP和主机名。
那么whiptail
命令的作用,就是出现一个可以交互的图形化界面,并且样式有很多。
在之前的课程中,我们已经使用流程控制语句,满足了一个跳板机的需求,但是我们还想是想更多的功能,当然脚本也都能实现,但是我们想要更炫酷的,脱离死气沉沉的命令行。
那么我们就一起来看一下,whiptail可以实现哪些需求吧...
消息框
#!/bin/bash
## 消息框
whiptail --title "$HOSTNAME Disk Info" --msgbox "`df -h`" 30 60
--title: #指定标题内容:$HOSTNAME Disk Info
--msgbox: #指定信息内容:`df -h`
30: #展示信息框的高度为:30
60: #展示信息框的宽度为:60
返回值
$? 0
布尔值选择框
## 布尔值选择框
whiptail --title "你确定要这么做吗?" --yesno "请做出你的选择YES or NO !" 10 60
echo $?
返回值
yes:0
no:1
## 布尔值选择框案例一:
whiptail --title "你确定要这么做吗?" --yesno "请做出你的选择YES or NO !" 10 60
if [ $? -eq 0 ];then
echo '选择的yes'
else
echo '选择的是no'
fi
## 布尔值选择框案例二:
whiptail --title "你确定要这么做吗?" --yes-button "运维" --no-button "开发" --yesno "请选择你在公司的岗位" 10 60
if [ $? -eq 0 ];then
echo '你的岗位是运维'
else
echo '你的岗位是开发'
fi
--titlle:标题
--yes-button:yes的按钮可以改名
--no-button:no的按钮可以改名
--yesno:布尔值框,后面可以加框内的内容
交互式输入框
语法:
whiptail --title "<标题>" --inputbox "<信息>" <高度> <宽度> <默认值>
实践
whiptail --title "曾老湿跳板机-10.0.0.61" --inputbox "请输入一个文件名路径:" 10 60 /etc/passwd 3>&1 1>&2 2>&3
## 交互式输入框
source_file=`whiptail --title "曾老湿跳板机-10.0.0.61" --inputbox "请输入源文件位置:" 10 60 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
dest_file=`whiptail --title "曾老湿跳板机-10.0.0.61" --inputbox "请输入对端存放位置:" 10 60 /etc/passwd 3>&1 1>&2 2>&3`
if [ $? -eq 0 ];then
scp $source_file 172.16.1.7:$dest_file &>/dev/null
else
echo '请输入一个目标路径'
fi
else
echo '请输入一个源文件路径'
fi
## 交互式输入框
source_file=`whiptail --title "曾老湿跳板机-10.0.0.61" --inputbox "请输入源文件位置:" 10 60 3>&1 1>&2 2>&3`
whiptail --title "$HOSTNAME Disk Info" --msgbox "$source_file" 30 60
## 选项
--inputbox:交互式输入框
10 60 /etc/passwd
10:高度
60:宽度
/etc/passwd:默认值
## 返回值
选择OK:0
选择Cancel:1
命令本身带输入内容,输入内容可以保存在变量中
密码输入框
PASSWD=`whiptail --title "曾老湿跳板机-10.0.0.61" --passwordbox "请输入一个密码名路径:" 10 60 3>&1 1>&2 2>&3`
# 实战
## 密码输入框
PASSWD=`whiptail --title "曾老湿跳板机-10.0.0.61" --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
# 返回值
选择OK:0
选择Cancel:1
命令本身带输入内容,输入内容可以保存在变量中
菜单栏
## 菜单栏
OPTION=$(whiptail --title "曾老湿跳板机-10.0.0.61" --menu "根据菜单选吧老弟" 30 60 10 \
"1" "lb01" \
"2" "lb02" \
"3" "web01" \
"4" "web02" \
"5" "web03" 3>&1 1>&2 2>&3)
--menu:菜单栏
30:高度
60:宽度
10:菜单显示几行内容
## 返回值
选择OK:0
选择Cancel:1
选择的值,会将序号保存在OPTION变量中
## 实战
## 菜单栏
OPTION=$(whiptail --title "曾老湿跳板机-10.0.0.61" --menu "根据菜单选吧老弟" 30 60 10 \
"1" "lb01" \
"2" "lb02" \
"3" "web01" \
"4" "web02" \
"5" "web03" 3>&1 1>&2 2>&3)
if [ $? -eq 0 ];then
case $OPTION in
1)
echo "连接 lb01"
;;
3)
ssh 172.16.1.7
;;
esac
else
echo "选择了退出"
fi
单选框
## 语法
DISTROS=$(whiptail --title "曾老湿跳板机-10.0.0.61" --radiolist "请在下面内容选择一项,上下左右移动,空格选中" 20 60 10 \
"send" "发送文件" OFF \
"useradd" "创建用户" OFF \
"ssh" "远程连接" ON \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3)
## 选项
--radiolist:单选框
OFF:默认没有被选中
ON:默认被选中
多选没有意义,后面的选项会覆盖前面的选项
## 返回值
选择OK:0
选择Cancel:1
多选框
# 语法:
DISTROS=$(whiptail --title "曾老湿跳板机-10.0.0.61" --checklist "请在下面内容选择一项,上下左右移动,空格选中" 20 60 10 \
"send" "发送文件" ON \
"useradd" "创建用户" OFF \
"ssh" "远程连接" OFF \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3)
## 多选框实战
send(){
echo 执行send函数
}
mem(){
echo 执行mem函数
}
DISTROS=$(whiptail --title "曾老湿跳板机-10.0.0.61" --checklist "请在下面内容选择一项,上下左右移动,空格选中" 20 60 10 \
"send" "发送文件" ON \
"useradd" "创建用户" OFF \
"ssh" "远程连接" OFF \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3)
echo $?
echo $DISTROS
for n in $DISTROS;do
${n//\"/''}
done
## 返回值:
选择OK:0
选择Cancel:1
进度条
{
for ((i = 0 ; i <= 100 ; i+=30)); do
sleep 1
echo $i
done
} | whiptail --gauge "等一下子,正在安装" 6 60 0