IT博客汇
首页
精华
技术
设计
资讯
扯淡
权利声明
登录
注册
使用whiptail在shell脚本中创建交互式对话框?
99527
发表于
2015-06-27 23:41:45
love
0
当你在终端环境下安装新的软件时,你可以经常看到信息对话框弹出,需要你的输入。对话框的类型有密码箱,检查表,菜单,等等。他们可以引导你以一种直观的方式输入必要的信息,使用这样的用户友好的对话框的好处是显而易见的。如下图所示:当你写一个交互式shell脚本,你可以使用这样的对话框来接受用户的输入。whiptail可以在shell脚本中创建基于终端的对话框,消息框的过程,类似于Zenity或xdialogGUI脚本代码。预先安装在所有的Linux发布版本中。下面来看看whiptail的用法:创建一个消息框一个消息框中显示一个确认按钮继续任意的文本消息。语法:whiptail --title "
" --msgbox "
"
实例:#!/bin/bashwhiptail --title"Test Message Box"--msgbox"Create a message box with whiptail. Choose Ok to continue."10 60创建一个yes/no对话框用户输入yes或no的对话框。语法:whiptail --title "
" --yesno "
"
实例:#!/bin/bashif(whiptail --title"Test Yes/No Box"--yesno"Choose between Yes and No."10 60)thenecho"You chose Yes. Exit status was $?."elseecho"You chose No. Exit status was $?."fi或者,你可以是“--yes-button” ,"--no-button"选项。#!/bin/bashif(whiptail --title"Test Yes/No Box"--yes-button"Skittles"--no-button"M&M;'s"--yesno"Which do you like better?"10 60)thenecho"You chose Skittles Exit status was $?."elseecho"You chose M&M;'s. Exit status was $?."fi创建一个表单输入框如果你想用户输入任意的文本,您可以使用一个输入框。语法:whiptail --title "
" --inputbox "
"
实例:#!/bin/bashPET=$(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 ];thenecho"Your pet name is:"$PETelseecho"You chose Cancel."fi创建一个密码框当用户需要输入敏感信息时密码框是有用的。语法:whiptail --title "
" --passwordbox "
"
实例:#!/bin/bashPASSWORD=$(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 ];thenecho"Your password is:"$PASSWORDelseecho"You chose Cancel."fi创建一个菜单栏当你想让用户选择一个任意数量的选择中,你可以使用菜单框。语法:whiptail --title "
" --menu "
"
[
] . . .实例:#!/bin/bashOPTION=$(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 ];thenecho"Your chosen option:"$OPTIONelseecho"You chose Cancel."fi创建radiolist对话框语法:whiptail --title "
" --radiolist "
"
[
] . . .实例:#!/bin/bashDISTROS=$(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 ];thenecho"The chosen distro is:"$DISTROSelseecho"You chose Cancel."fi创建一个表对话框当你想让用户选择一个列表中选择多个选项的清单对话框是有用的,radiolist对话框,只允许选择一个。语法:whiptail --title "
" --checklist "
"
[
] . . .实例:#!/bin/bashDISTROS=$(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 ];thenecho"Your favorite distros are:"$DISTROSelseecho"You chose Cancel."fi创建一个进度条进度条是一个用户友好的对话框。whiptail从标准输入读取一个百分数(0~100),显示一个表内相应的计数。语法:whiptail --gauge "
"
实例:#!/bin/bash{for((i = 0 ; i <= 100 ; i+=20));dosleep1echo$idone} | whiptail --gauge"Please wait while installing"6 60 0很容易在交互式shell脚本创建有用的对话框了吧。后续需要写一个交互式的shell脚本,试着用whiptail:)