shell脚本7---图形化shell

select

select 命令允许从单个命令行创建菜单,然后在提取输入并自动处理。格式如下:

select <variable> in <list>
do
    commands
done

list参数是构成菜单的空格分隔的文本选项列表。select命令会在列表中将每个选项作为一个编好号的选项显示,然后为选项显示一个特殊的由PS3环境变量定义的提示符。
举例

#!/bin/bash

PS3="Enter option:"
select option in "Display disk space" "Display logged users" "Display memory usage" "Exit program"
do
    case $option in
        "Exit program")
              break  ;;
        "Display disk space")
              <commands or functions>;;
         "Display logged users")
              <commands or functions>;;
        "Display memory usage")
              <commands or functions>;;
        *)
              clear
              echo "Sorry, wrong selection.";;
      esac
done

执行上面的脚本会有如下输出

1) Display disk space    3) Display memory usage
2) Display logged users  4) Exit program
Enter option:

在使用select命令时要注意,存储在变量中的是整个文本字符串而不是与之关联的数字。

dialog

dialog命令使用命令行参数来决定生成哪种窗口部件(widget)。部件是dialog包中窗口元素类型的术语,dialog支持的部件类型

部件 描述
calendar 提供选择日期的日历
checklist 显示多个选项(其中每个选项都能打开或者关闭)
form 构建一个表单(用标签和文本字段来填充)
fselect 提供一个文件选择窗口来浏览选择文件
gauge 显示完成的百分比进度条
infobox 显示一条消息,但不用等待回应
inputbox 提供一个输入文本用的文本表单
inputmenu 提供一个可编辑的表单
menu 显示可选择的一系列选项
msgbox 显示一条消息,并要求用户选择OK按钮
pause 显示一个进度条来显示特定暂定时间的状态
passwordbox 显示一个文本框来输入文本,但会隐藏输入的文本
passwordform 显示一个带标签和隐藏文本输入的表单
radiolist 提供一组菜单选项,但只能选择其中一个
tailbox 用tail命令在滚动窗口中显示文件的内容
tailboxbg 和tailbox一样,但是在后台模式中运行
timebox 提供一个选择小时、分钟和秒的窗口
yesno 提供一个简单的带yes和no按钮的窗口
msgbox
dialog --title 'Message' --msgbox 'Hello, world!' 5 20

创建一个message box,标题是Message,内容是“Hello, world!”。高是5,宽20,会有一个OK按钮在上面。
大多数的部件创建格式都是相同的:一个可选的title,对话框类型,显示的文本,对话框的高和宽,外加其他额外的参数。

yesno
dialog --title "Message"  --yesno "Are you having\ fun?" 6 25

这个命令运行后,在对话框上会看到两个按钮,分别写着"Yes"和"No"。如果选择yes那么返回给shell的状态码就是0,选择no返回的是1。

infobox
dialog --infobox "Please wait" 10 30 ; sleep 4

infobox只显示一段信息,而不用等着用户按OK按钮。

inputbox
dialog --inputbox "Enter your name:" 8 40 2>answer

inputbox允许用户输入一串字符,在用户按OK之后,字符被写道标准错误输出或者指定的文件描述符。

textbox
dialog --textbox /etc/profile 22 70

textbox是一个简单的文件查看器,参数是一个文件名。常用的方向键可以使用,或者vi的方向键。

menu

格式如下

dialog --menu <text> <height> <width>
<menu-height> [<tag><item>]

menu用来创建一个可以被选择的菜单。每一个菜单由tag和与之关联的item组成。用户可以使用光标来选定tag并按enter键。被选择的itag会被选到标准输出,举例如下:

dialog --menu "Choose one:" 10 30 3 1 red 2 green 3 blue
checklist

checklist展现给用户一系列选项,可以用space键来选择。

dialog --checklist "Choose toppings:" 10 40 3 \
        1 Cheese on \
        2 "Tomato Sauce" on \
        3 Anchovies off

第三列是初始状态,可以是on或者off。

radiolist

和checklist很像,但radiolist要求用户必须选择一个选项,且只能选择一个。

dialog --backtitle "CPU Selection" \
  --radiolist "Select CPU type:" 10 40 4 \
        1 386SX off \
        2 386DX on \
        3 486SX off \
        4 486DX off

一个简单的例子如下:

#!/bin/bash

# inputbox - demonstrate the input dialog box with a temporary file

# Define the dialog exit status codes
: ${DIALOG_OK=0}
: ${DIALOG_CANCEL=1}
: ${DIALOG_HELP=2}
: ${DIALOG_EXTRA=3}
: ${DIALOG_ITEM_HELP=4}
: ${DIALOG_ESC=255}

# Create a temporary file and make sure it goes away when we're dome
tmp_file=$(tempfile 2>/dev/null) || tmp_file=/tmp/test$$
trap "rm -f $tmp_file" 0 1 2 5 15

# Generate the dialog box
dialog --title "INPUT BOX" \
  --clear  \
  --inputbox "Hi, this is an input dialog box. You can use \n
this to ask questions that require the user \n
to input a string as the answer. You can \n
input strings of length longer than the \n
width of the input box, in that case, the \n
input field will be automatically scrolled. \n
You can use BACKSPACE to correct errors. \n\n
Try entering your name below:" 16 51 2> $tmp_file

# Get the exit status
return_value=$?

# Act on it
case $return_value in
  $DIALOG_OK)
    echo "Result: `cat $tmp_file`";;
  $DIALOG_CANCEL)
    echo "Cancel pressed.";;
  $DIALOG_HELP)
    echo "Help pressed.";;
  $DIALOG_EXTRA)
    echo "Extra button pressed.";;
  $DIALOG_ITEM_HELP)
    echo "Item-help button pressed.";;
  $DIALOG_ESC)
    if test -s $tmp_file ; then
      cat $tmp_file
    else
      echo "ESC pressed."
    fi
    ;;
esac

更多例子参考网络文章

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342