[toc]
whiptail概述
在CentOS6系统中,我们可以使用setup
指令来修改网卡的IP等信息,交互起来十分方便
在CentOS7系统中,setup
命令已经没有了,但是还有nmtui
命令,可以让我们修改IP和主机名。
那么whiptail
命令的作用,就是出现一个可以交互的图形化界面,并且样式有很多。
在之前的课程中,我们已经使用流程控制语句,满足了一个跳板机的需求,但是我们还想是想更多的功能,当然脚本也都能实现,但是我们想要更炫酷的,脱离死气沉沉的命令行。
那么我们就一起来看一下,whiptail可以实现哪些需求吧…
消息框
1 2 3 4 5 6 7 8 9
|
whiptail --title "$HOSTNAME Disk Info" --msgbox "`df -h`" 30 60
--title: --msgbox: 30: 60:
|
返回值
单选框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| DISTROS=$(whiptail --title "暴龙战士的跳板机-10.0.0.7" --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
|
多选框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| DISTROS=$(whiptail --title "暴龙战士的跳板机-10.0.0.7" --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.7" --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
|
实战示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| send(){ echo 执行send函数 }
DISTORS=$(whiptail --title "暴龙战士的跳板机-10.0.0.7" --radiolist \ "请在下面内容选择一项, 上下移动,空格选中 TAB选择OK或退出" 10 60 4 \ "send" "发送文件" ON \ "Useradd" "创建用户" OFF \ "ssh" "远程连接" ON \ "mem" "查看内存" OFF 3&>1 1&>2 2&>3) echo $? echo $DISTROS
for n in $DISTORS;do ${n//\"/''} done
|
布尔值选择框
1 2 3
| whiptail --title "你确定要这么做吗?" --yesno "请做出你的选择YES or NO !" 10 60 echo $?
|
返回值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| echo $? 0
echo $? 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:布尔值框,后面可以加框内的内容
|
交互式输入框
1 2
| 语法: whiptail --title "<标题>" --inputbox "<信息>" <高度> <宽度> <默认值>
|
实战示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| whiptail --title "跳板机-10.0.0.7" --inputbox "请输入一个文件名路径:" 10 60 /etc/passwd 3>&1 1>&2 2>&3
source_file=`whiptail --title "跳板机-10.0.0.7" --inputbox "请输入源文件位置:" 10 60 3>&1 1>&2 2>&3` if [ $? -eq 0 ];then dest_file=`whiptail --title "暴龙战士的跳板机-10.0.0.7" --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.7" --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
命令本身带输入内容,输入内容可以保存在变量中
|
密码输入框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| PASSWD=`whiptail --title "暴龙战士的跳板机-10.0.0.7" --passwordbox "请输入一个密码名路径:" 10 60 3>&1 1>&2 2>&3`
PASSWD=`whiptail --title "暴龙战士的跳板机-10.0.0.7" --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
命令本身带输入内容,输入内容可以保存在变量中
|
菜单栏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| OPTION=$(whiptail --title "暴龙战士的跳板机-10.0.0.7" --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.7" --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
|
实战示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
OPTION=$(whiptail --title "跳板机-10.0.0.7" --menu "请根据菜单选择" 30 60 4 \ "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 ssh 172.16.1.5 ;; 2) echo 连接到lb02 ssh 172.16.1.6 ;; 3) echo 连接到webo1 ssh 172.16.1.7 ;; 4) echo 连接到web02 ssh 172.16.1.8 ;; 5) echo 连接到wen03 ssh 172.16.1.9 ;; esac else echo 选择了退出 fi
|
进度条
1 2 3 4 5 6
| { for ((i = 0 ; i <= 100 ; i+=30)); do sleep 1 echo $i done } | whiptail --gauge "等一下子,正在安装" 6 60 0
|