[toc]
whiptail概述
在CentOS6系统中,我们可以使用setup指令来修改网卡的IP等信息,交互起来十分方便
在CentOS7系统中,setup命令已经没有了,但是还有nmtui命令,可以让我们修改IP和主机名。
那么whiptail命令的作用,就是出现一个可以交互的图形化界面,并且样式有很多。
在之前的课程中,我们已经使用流程控制语句,满足了一个跳板机的需求,但是我们还想是想更多的功能,当然脚本也都能实现,但是我们想要更炫酷的,脱离死气沉沉的命令行。
那么我们就一起来看一下,whiptail可以实现哪些需求吧…
消息框
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | 
 
 whiptail --title "$HOSTNAME Disk Info" --msgbox "`df -h`" 30 60
 
 --title:
 --msgbox:
 30:
 60:
 
 | 
返回值
单选框
| 12
 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
 
 | 
多选框
| 12
 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
 
 | 
实战示例
| 12
 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
 
 | 
布尔值选择框
| 12
 3
 
 | whiptail --title "你确定要这么做吗?" --yesno "请做出你的选择YES or NO !" 10 60
 echo $?
 
 | 
返回值
| 12
 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:布尔值框,后面可以加框内的内容
 
 | 
交互式输入框
| 12
 
 | 语法:whiptail --title "<标题>" --inputbox "<信息>" <高度> <宽度> <默认值>
 
 | 
实战示例
| 12
 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
 
 命令本身带输入内容,输入内容可以保存在变量中
 
 | 
密码输入框
| 12
 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
 
 命令本身带输入内容,输入内容可以保存在变量中
 
 | 
菜单栏
| 12
 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
 
 | 
实战示例
| 12
 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
 
 | 
进度条
| 12
 3
 4
 5
 6
 
 | {for ((i = 0 ; i <= 100 ; i+=30)); do
 sleep 1
 echo $i
 done
 } | whiptail --gauge "等一下子,正在安装" 6 60 0
 
 |