whiptail 可视化


消息框-- tille -- msgbox

whiptail --title "跳板机-10.0.0.7" --msgbox "welcome to web01" 10 60
--title 		# 标题框
--msgbox 		# 消息框
10 				# 消息框高度
60 				# 消息框宽度

# ok的返回值
0

image-20240710141155228


布尔值选择框 --yesno --yes-button --nobutton

############ 单独 --yesno ###############
whiptail --title "跳板机-10.0.0.61" --yesno "请做出选择" 10 60
############## 加上 --yes-button  和--no-button ###########
whiptail --title "跳板机-10.0.0.7" --yesno "请做出选择" --yes-button "确认" --nobutton "否认" 10 60
--title 			# 标题框
--yesno 			# 布尔值框
--yes-button 		 # 确认按钮
--no-button 		 # 否认按钮
# yes选项 返回值0
# no选项 返回值1

image-20240710141351070

image-20240710141559052


交互式输入框--inputbox

whiptail --title "标题" --inputbox "信息" 高度 宽度 默认值
src=`whiptail --title "跳板机-10.0.0.61" --inputbox "请输入一个文件路径" 10 60
/etc/passwd`
/etc/passwd
dest=`whiptail --title "跳板机-10.0.0.61" --inputbox "请输入对端路径" 10 60 /tmp`

image-20240710142317868

scp 你要推送的文件 用户名@IP: 对端的路径
scp $src [email protected]:$dest
########################### 方法一 ##############################
src=`whiptail --title "跳板机-10.0.0.61" --inputbox "请输入一个文件路径" 10 60 /etc/passwd 3>&1 1>&2 2>&3`
if [ $? -eq 0 -a -n "$src" ];then
	dest=`whiptail --title "跳板机-10.0.0.61" --inputbox "请输入对端路径" 10 60 /tmp 3>&1 1>&2 2>&3`
	if [ $? -eq 0  -n "$dest" ];then
		scp $src 172.16.1.7:$dest &>/dev/null
	else
		echo '请输入对端的路径 并点击ok'
	fi
else
	echo '请输入一个源文件路径 并点击ok'
fi
########################### 方法二 ############################
whiptail --title "跳板机-10.0.0.61" --inputbox "请输入一个文件路径" 10 60 /etc/passwd 2> 1.txt && src=`cat 1.txt`
if [ $? -eq 0 -a -n "$src" ];then
        whiptail --title "跳板机-10.0.0.61" --inputbox "请输入对端路径" 10 60 /tmp 2> 2.txt && dest=`cat 2.txt`
        if [ $? -eq 0 -a -n "$dest" ];then
                scp $src 172.16.1.7:$dest &>/dev/null
        else
                echo '请输入对端的路径 并点击ok'
        fi
else
        echo '请输入一个源文件路径 并点击ok'
fi

rm 1.txt 2.txt -f
whiptail 默认会将用户输入输出到标准错误流(stderr),这就需要用到文件描述符重定向来正确捕获用户输入并赋值给变量。
############## 解决变量赋予问题 ############
#----- 方法一 -------#

3>&1 1>&2 2>&3     # 文件描述符重定向,用于捕获用户输入。
3>&1:
创建一个新的文件描述符 3,并将其指向文件描述符 1(标准输出)。
此时,文件描述符 3 保存了原始的标准输出。
1>&2:
将文件描述符 1(标准输出)重定向到文件描述符 2(标准错误输出)。
此时,标准输出被重定向到标准错误输出。
2>&3:
将文件描述符 2(标准错误输出)重定向到文件描述符 3。
此时,标准错误输出被重定向到最初的标准输出(存储在文件描述符 3 中)。
0:标准输入(stdin)
1:标准输出(stdout)
2:标准错误输出(stderr)
#------ 方法二 ------#
whiptail --title "跳板机-10.0.0.6" --inputbox "输入对端路径" 10 60 /tmp 2> 2.txt && dest=`cat 2.txt`
将其错误输入写入文件中 后期调用
注意脚本后期的删除文件  
###### 额外补充 #######
3>&1 1>&2 2>&3 和 3>1 1>2 2>3 的区别
> 用于将输出重定向到文件。
>& 用于将文件描述符重定向到另一个文件描述符。

密码输入框 --passwordbox

whiptail --title "跳板机-10.0.0.61" --passwordbox "请输入密码" 10 60

tab 键进行结果的选择 

image-20240710144449235


菜单栏--menu

cat <<EOF
....
EOF
whiptail --title "跳板机-10.0.0.61" --menu "根据菜单进行选择" 10 60 number(显示的行) \
"1" "web01" \
"2" "web02" \
"3" "web03" \
"4" "lb01" \
"5" "lb02" 3>&1 1>&2 2>&3

image-20240710144739380


单选框--radiolist

whiptail --title "跳板机-10.0.0.61" --radiolist \
"请在下面的内容中选择一项 上下左右控制移动 空格选中" 25 60 4number(显示的行) \
"send" "发送文件" ON \
"useradd" "创建用户" OFF \
"ssh" "远程连接" OFF \
"mem" "查看内存" OFF 3>&1 1>&2 2>&3
ON 只开启一个 也只会选择一个 

image-20240710145136807


多选框--checklist

whiptail --title "跳板机-10.0.0.61" --checklist \
"请在下面的内容中选择一项 上下左右控制移动 空格选中" 25 60 4 \
send "发送文件" ON \
useradd "创建用户" OFF \
ssh "远程连接" OFF \
mem "查看内存" OFF 3>&1 1>&2 2>&3

10 高度
60 宽度
4 显示4行
这个NO 和 OFF 可以选择多个
注意这个筛选出来带着 ""

image-20240710145416148


进度条--gayge

{
	for (( i=0 ; i<=100 ; i+=20 ));do
		sleep 1
		echo $i
	done
}| whiptail --gauge "loading instaling...." 10 60 100

10 高度
60 宽度
100 开始百分比  无效的

image-20240710145616261


ctrl + c无法退出的原因 以及一些解决方法