图形化跳板机模块

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
posted @ 2022-07-27 17:44  Gabydawei  阅读(101)  评论(0编辑  收藏  举报