网易首页 > 网易号 > 正文 申请入驻

创建交互式shell脚本对话框

0
分享至


当你写一个交互式shell脚本,你可以使用这样的对话框来接受用户的输入。whiptail可以在shell脚本中创建基于终端的对话框,消息框的过程,类似于Zenity或xdialog GUI脚本代码。whiptail预先安装在所有的Linux发布版本中。
或者,你可以是“--yes-button” ,"--no-button"选项。

当你在终端环境下安装新的软件时,你可以经常看到信息对话框弹出,需要你的输入,比如:RHEL/CentOS自带的setup,对话框的类型有密码箱、检查表、菜单等等。他们可以引导你以一种直观的方式输入必要的信息,使用这样的用户友好的对话框的好处是显而易见的。如下图所示:

创建一个消息框

一个消息框中显示一个确认按钮继续任意的文本消息。

语法:

whiptail --title "

" --msgbox "

实例:

#!/bin/bash
whiptail --title "Test Message Box" --msgbox "Create a message box with whiptail. Choose Ok to continue." 10 60

创建一个yes/no对话框

用户输入yes或no的对话框。

语法:

whiptail --title "

实例:

#!/bin/bash
if (whiptail --title "Test Yes/No Box" --yesno "Choose between Yes and No." 10 60) then
echo "You chose Yes. Exit status was $?."
else
echo "You chose No. Exit status was $?."
fi

#!/bin/bash
if (whiptail --title "Test Yes/No Box" --yes-button "Skittles" --no-button "M&M's" --yesno "Which do you like better?" 10 60) then
echo "You chose Skittles Exit status was $?."
else
echo "You chose M&M's. Exit status was $?."
fi

创建一个表单输入框

如果你想用户输入任意的文本,您可以使用一个输入框。

语法:

whiptail --title "" --inputbox "

实例:

#!/bin/bash
PET=$(whiptail --title "Test Free-form Input Box" --inputbox "What is your pet's name?" 10 60 Wigglebutt 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your pet name is:" $PET
else
echo "You chose Cancel."
fi

创建一个密码框

当用户需要输入敏感信息时密码框是有用的。

语法:

whiptail --title "

" --passwordbox "

实例:

#!/bin/bash
PASSWORD=$(whiptail --title "Test Password Box" --passwordbox "Enter your password and choose Ok to continue." 10 60 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your password is:" $PASSWORD
else
echo "You chose Cancel."
fi

创建一个菜单栏

当你想让用户选择一个任意数量的选择中,你可以使用菜单框。

语法:

whiptail --title "

" --menu "

实例:

#!/bin/bash
OPTION=$(whiptail --title "Test Menu Dialog" --menu "Choose your option" 15 60 4 \
"1" "Grilled Spicy Sausage" \
"2" "Grilled Halloumi Cheese" \
"3" "Charcoaled Chicken Wings" \
"4" "Fried Aubergine" 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your chosen option:" $OPTION
else
echo "You chose Cancel."
fi

创建radiolist对话框

语法:

whiptail --title "

" --radiolist "

实例:

#!/bin/bash
DISTROS=$(whiptail --title "Test Checklist Dialog" --radiolist \
"What is the Linux distro of your choice?" 15 60 4 \
"debian" "Venerable Debian" ON \
"ubuntu" "Popular Ubuntu" OFF \
"centos" "Stable CentOS" OFF \
"mint" "Rising Star Mint" OFF 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "The chosen distro is:" $DISTROS
else
echo "You chose Cancel."
fi

创建一个表对话框

当你想让用户选择一个列表中选择多个选项的清单对话框是有用的,radiolist对话框,只允许选择一个。

语法:

whiptail --title "

" --checklist "

实例:

#!/bin/bash
DISTROS=$(whiptail --title "Test Checklist Dialog" --checklist \
"Choose preferred Linux distros" 15 60 4 \
"debian" "Venerable Debian" ON \
"ubuntu" "Popular Ubuntu" OFF \
"centos" "Stable CentOS" ON \
"mint" "Rising Star Mint" OFF 3>&1 1>&2 2>&3)
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Your favorite distros are:" $DISTROS
else
echo "You chose Cancel."
fi

创建一个进度条

进度条是一个用户友好的对话框。whiptail从标准输入读取一个百分数(0~100),显示一个表内相应的计数。

语法:

whiptail --gauge "

实例:

#!/bin/bash
{
for ((i = 0 ; i <= 100 ; i+=20)); do
sleep 1
echo $i
done
} | whiptail --gauge "Please wait while installing" 6 60 0

  • 原文来自:http://www.ttlsa.com/shell/how-to-create-dialog-boxes-in-interactive-shell-script/
  • 本文地址:https://www.linuxprobe.com/create-interactive-shell-script.html编辑:逄增宝,审核员:张宏宇

本文原创地址:https://www.linuxprobe.com/create-interactive-shell-script.html编辑:清蒸github,审核员:暂无

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
为什么朋友圈很少晒4年级以上的娃,网友评论太真实了

为什么朋友圈很少晒4年级以上的娃,网友评论太真实了

阿康四岁啦
2024-06-15 13:31:38
“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

“一丝不挂”新舞蹈?惹争议,被摸下体更不害臊,金星质疑是对的

吃鱼思故渊
2024-05-16 21:48:21
小米汽车销量连续下跌,两周减少了22%!什么原因?

小米汽车销量连续下跌,两周减少了22%!什么原因?

每日经济新闻
2024-06-13 16:46:18
东方网:有网友发现,欧洲杯场边中文广告牌有定制虚拟广告

东方网:有网友发现,欧洲杯场边中文广告牌有定制虚拟广告

直播吧
2024-06-15 16:01:55
美军印太司令:如果再有中方军舰敢阻拦,美舰可不请示立即开火!

美军印太司令:如果再有中方军舰敢阻拦,美舰可不请示立即开火!

小lu侃侃而谈
2024-06-11 15:25:18
科普:怎么rua女友的胸,才能让她更愉悦?

科普:怎么rua女友的胸,才能让她更愉悦?

喜马拉雅主播暮霭
2024-06-13 10:03:38
已婚女人去这里,就是想让你“搞”,男人别错过了

已婚女人去这里,就是想让你“搞”,男人别错过了

故衣谈历史
2024-06-14 16:05:47
还记得上海电视台的主持人和晶吗?

还记得上海电视台的主持人和晶吗?

综艺拼盘汇
2024-06-16 07:25:09
浅析:俄罗斯派遣800辆T-62上前线 一年多之后 老式坦克表现如何

浅析:俄罗斯派遣800辆T-62上前线 一年多之后 老式坦克表现如何

hawk26讲武堂
2024-06-14 07:49:56
父亲头七刚过,分家产时养女自觉离开,上火车时却被哥嫂跩下来

父亲头七刚过,分家产时养女自觉离开,上火车时却被哥嫂跩下来

娱乐洞察点点
2024-06-03 16:54:38
伊万:孙兴慜身价是我们全队的50倍,但我们在很多方面限制了他

伊万:孙兴慜身价是我们全队的50倍,但我们在很多方面限制了他

直播吧
2024-06-15 19:33:36
头发从哪白,病从哪里来!3处白发最危险,别以为只是年纪到了

头发从哪白,病从哪里来!3处白发最危险,别以为只是年纪到了

祖医堂
2024-06-15 08:40:36
上海各区首富名单出炉,2人坐拥超千亿!三位“80后”上榜

上海各区首富名单出炉,2人坐拥超千亿!三位“80后”上榜

雷哥的美食
2024-06-15 15:20:26
骗过全世界!中国家门口竟隐藏一个核大国,不是俄罗斯和印度

骗过全世界!中国家门口竟隐藏一个核大国,不是俄罗斯和印度

星辰故事屋
2024-06-15 17:36:30
爆冷杀入“阿里全球数学竞赛”的中专女生:梦想就是考大学

爆冷杀入“阿里全球数学竞赛”的中专女生:梦想就是考大学

澎湃新闻
2024-06-13 20:48:30
欧盟对华汽车加征关税,中方的反击已就绪,大众奔驰宝马齐声反对

欧盟对华汽车加征关税,中方的反击已就绪,大众奔驰宝马齐声反对

知道宏观
2024-06-15 17:14:06
卡拉斯科:沙特联赛的水平比中国联赛高多了 C罗一人住一栋楼

卡拉斯科:沙特联赛的水平比中国联赛高多了 C罗一人住一栋楼

直播吧
2024-06-15 13:09:08
台湾问题根本不是武统与和统的问题了,而是以下这两方面问题

台湾问题根本不是武统与和统的问题了,而是以下这两方面问题

星辰故事屋
2024-05-24 20:01:38
欧倩怡首回应离婚,每天买菜送娃惨过佣人,单身后和6名男士约会

欧倩怡首回应离婚,每天买菜送娃惨过佣人,单身后和6名男士约会

开开森森
2024-06-15 07:58:01
河南三门峡市陕州区甘山林场原场长刘正理接受审查调查

河南三门峡市陕州区甘山林场原场长刘正理接受审查调查

鲁中晨报
2024-06-15 10:59:02
2024-06-16 10:56:49
孙有匪
孙有匪
科技
1595文章数 2009关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

40余套房屋涉嫌"一房多卖" 有购房者内心积郁因病去世

头条要闻

40余套房屋涉嫌"一房多卖" 有购房者内心积郁因病去世

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

东风奕派eπ008售21.66万元 冰箱彩电都配齐

态度原创

本地
手机
艺术
时尚
军事航空

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

手机要闻

这次稳妥了,小米15系列手机发布时间、配置信息都有了准信

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

中年女性还是穿连衣裙最有气质!裙摆过膝、腰部收紧,巨显瘦

军事要闻

普京提停火和谈条件 美防长迅速回应

无障碍浏览 进入关怀版