shell之dialog详解

  Liunx下的dialog工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具,每个对话框提供的输出有两种形式:

  1. 将所有输出到stderr输出,不显示到屏幕。
  2. 使用退出状态码,OK0NO1ESC255

  通用选项如下(这些选项来设置dialog box的背景、颜色和标题等):

  • --title <title>:指定将在对话框的上方显示的标题字符串。
  • --no-shadow:禁止阴影出现在每个对话框的底部。
  • --shadow:应该是出现阴影效果。
  • --insecure:输入部件的密码时,明文显示不安全,使用星号来代表每个字符。
  • --no-cancel:设置在输入框、菜单和复选框中,不显示cancel项。
  • --clear:完成清屏操作。在框体显示结束后,清除框体。这个参数只能单独使用,不能和别的参数联合使用。
  • --ok-label <str>:覆盖使用OK按钮的标签,换做其他字符。
  • --cancel-label <str>:功能同上。
  • --backtitle <backtitle>:指定的backtitle字符串显示在背景顶端。
  • --begin <y> <x>:指定对话框左上角在屏幕的上的做坐标。
  • --timeout <secs>:超时(返回的错误代码),如果用户在指定的时间内没有给出相应动作,就按超时处理。
  • --stderr:以标准错误方式输出。
  • --stdout:以标准方式输出。
  • --default-item <str>:设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认。

  常见的对话框控件选项有:

  • --calendar:提供了一个日历,让你可以选择日期。
  • --checklist:允许你显示一个选项列表,每个选项都可以被单独的选择(复选框)。
  • --from:允许您建立一个带标签的文本字段,并要求填写。
  • --fselect:提供一个路径,让你选择浏览的文件。
  • --gauge:显示一个表,呈现出完成的百分比,就是显示出进度。
  • --infobox:显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕(信息框)。
  • --inputbox:让用户输入文本(输入框)。
  • --inputmenu:提供一个可供用户编辑的菜单(可编辑的菜单框)。
  • --menu:显示一个列表供用户选择(菜单框)。
  • --msgbox:显示一条消息,并要求用户选择一个确定按钮(消息框)。
  • --pause:显示一个表格用来显示一个指定的暂停期的状态。
  • --passwordbox:显示一个输入框,它隐藏文本。
  • --passwordfrom:显示一个来源于标签并且隐藏的文本字段。
  • --radiolist:提供一个菜单项目组,只有一个项目,可以选择(单选框)。
  • --tailbox:在一个滚动窗口文件中使用tail命令来显示文本。
  • --tailboxbg:跟tailbox类似,但是在background模式下操作。
  • --textbox:在带有滚动条的文本框中显示文件的内容(文本框)。
  • --timebox:提供一个窗口,选择小时、分钟和秒。
  • --yesno:提供一个带有yesno按钮的简单信息框(是/否框)。

  消息框格式如下:

dialog --msgbox text height width

在这里插入图片描述

示例为:

dialog --title TESTING --msgbox "this is a test" 10 20

  yesno框格式如下:

dialog --yesno text height width

示例为:

dialog --title "yes/no" --no-shadow --yesno "Delete the file /tmp/chensiyao.txt?" 10 30

在这里插入图片描述

  输入框格式如下:

dialog --inputbox text height width

示例为:

# 这里的“2>”是将错误信息输出重定向到了“/tmp/name.txt”文件中
dialog --title "Input your name" --inputbox "Please input your name:" 10 30 2> /tmp/name.txt

在这里插入图片描述

  密码框格式如下:

dialog --passwordbox text height width

示例为:

dialog --title "Password" --passwordbox "Please give a password for the new user:" 10 35

在这里插入图片描述

这样密码就暴露出来了,通常会加上一个安全选项--insecure,将每个字符用*来显示出来:

dialog --title "Password" --insecure --passwordbox "Please give a password for the new user:" 10 30

在这里插入图片描述

  文本框格式如下:

dialog --textbox file height width

示例为:

dialog --title "The fstab" --textbox /etc/fstab 17 40

在这里插入图片描述

  菜单框格式如下:

dialog --menu text height width menu-height tag1 item1 tag2 item2 ...

示例为:

dialog --title "Pick a choice" --menu "Choose one" 12 35 5 1 "say hello to everyone" 2 "thanks for your support" 3 "exit"

在这里插入图片描述

  Fselect框(文件选框)格式如下:

dialog --fselect filepath height width

示例为:

dialog --title "Pick one file" --fselect /root/ 7 40

在这里插入图片描述

  复选框格式如下:

dialog --checklist "Test" height width menu-height tag1 item1 tag2 item2 ...

示例为:

dialog --backtitle "Checklist" --checklist "Test" 20 50 10 Memory Memory_Size 1 Dsik Disk_Size 2

在这里插入图片描述

  显示日历格式如下:

dialog --calendar "Date" height width day month year

示例为:

# 显示当前日期
dialog --title "Calendar" --calendar "Date" 5 50

在这里插入图片描述

# 显示指定日期
dialog --title "Calendar" --calendar "Date" 5 50 1 2 2013

在这里插入图片描述

  进度框架格式:

dialog --gauge text height width [<percent>]

示例为:

# 固定进度显示
dialog --title "installation pro" --gauge "installation" 10 30 10

在这里插入图片描述

# 实时动度进度
for i in {1..100} ;do echo $i;done | dialog --title "installation pro" --gauge "installation" 10 30

在这里插入图片描述

  form框架(表单)格式如下:

dialog --form text height width formheight [ label y x item y x flen ilen ] ...

其中flen表示field length,定义了选定字段中显示的长度;ilen表示input-length,定义了在外地输入的数据允许的长度。使用up/down(或Ctrl-NCtrl-P)在使用领域之间移动。使用tab键在窗口之间切换。示例为:

dialog --title "Add a user" --form "Please input the infomation of new user:" 12 40 4  \
  "Username:" 1  1 "" 1  15  15  0  \
  "Full name:" 2  1 "" 2  15  15  0  \
  "Home Dir:" 3  1 "" 3  15  15  0  \
  "Shell:"    4   1 "" 4  15  15  0

在这里插入图片描述

  为了能够访问用户输入的结果,对于文本输入,你只需要重定向标准错误流或检查环境变量$?的内容,$?的值实际上就是前一个命令的退出状态:

#!/bin/sh

dialog --title "Questionnaire" --msgbox "Welcome to my simple survey" 9 18
dialog --title "Confirm" --yesno "Are you willing to take part?" 9 18

if [ $? !=0 ]; then  # yes的返回码为0,“$?”为上一个命令的退出状态。
    dialog --infobox "Thank you anyway!" 5 20
    sleep 2
    dialog --clear  # “-clear”作用为清屏。
    exit 0
fi

# 重定向标准错误输出流(2)到“_1.txt”。
dialog --title "Questionnaire" --inputbox "Please enter your name" 9 30 2>_1.txt
Q_NAME=$(cat _1.txt)
dialog --menu "$Q_NAME,what music do you like best?" 15 30 4 1 "Classical" 2 "Jazz" 3 "Country" 4 "Other" 2>_1.txt
Q_MUSIC=$(cat _1.txt)

if [ "$Q_MUSIC" == "1" ]; then
    dialog --infobox "Good choice!" 5 20
else
    dialog --infobox "Thank you anyway" 5 20
fi

sleep 5
dialog --clear
exit 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值