whiptail 可视化
消息框-- tille -- msgbox
whiptail --title "跳板机-10.0.0.7" --msgbox "welcome to web01" 10 60
--title # 标题框
--msgbox # 消息框
10 # 消息框高度
60 # 消息框宽度
# ok的返回值
0
布尔值选择框 --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
交互式输入框--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`
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 键进行结果的选择
菜单栏--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
单选框--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 只开启一个 也只会选择一个
多选框--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 可以选择多个
注意这个筛选出来带着 ""
进度条--gayge
{
for (( i=0 ; i<=100 ; i+=20 ));do
sleep 1
echo $i
done
}| whiptail --gauge "loading instaling...." 10 60 100
10 高度
60 宽度
100 开始百分比 无效的
ctrl + c无法退出的原因 以及一些解决方法