最近使用dialog写图形自动化shell脚本,  功能很强大,功能不是非常多但是足够用。想写一篇linux下dialog的使用方法,虽然命令不多,但是写起来也需要下很大功夫,而且不一定写得更好,在网上发现一篇linux shell图形化脚本文件,于是转过来了.

liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具。
每个对话框提供的输出有两种形式:
1.  将所有输出到stderr 输出,不显示到屏幕。
2.  使用退出状态码,“OK”为0,“NO”为1,"ESC"为255

 
通用选项 common options:(这个选项来设置dialog box的背景,颜色和 标题等)[--title <title>]  指定将在对话框的上方显示的标题字符串
[--colors]    解读嵌入式“\ Z”的对话框中的特殊文本序列,序列由下面的字符 0-7, b  B, u, U等,恢复正常的设置使用“\Zn”。
[--no-shadow]   禁止阴影出现在每个对话框的底部
[--shadow]   应该是出现阴影效果[--insecure]   输入部件的密码时,明文显示不安全,使用星号来代表每个字符[--no-cancel]   设置在输入框,菜单,和复选框中,不显示“cancel”项
[--clear]   完成清屏操作。在框体显示结束后,清除框体。这个参数只能单独使用,不能和别的参数联合使用。
[--ok-label <str>]   覆盖使用“OK”按钮的标签,换做其他字符。
[--cancel-label <str>]  功能同上
[--backtitle <backtitle>] 
指定的backtitle字符串显示在背景顶端。
[--begin <y> <x>]   指定对话框左上角在屏幕的上的做坐标
[--timeout <secs>]   超时(返回的错误代码),如果用户在指定的时间内没有给出相应动作,就按超时处理
[--defaultno]   使的是默认值 yes/no,使用no
[--sleep <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     提供一个带有yes和no按钮的简单信息框  (是/否框)

如果没有此包请先安装
yum -y install dialog

命令示例:
1.消息框 格式:dialog  - -msgbox  text   height  width

例子:
 
1
#dialog    - -title   TESTING   - -msgbox  “this   is  a test “ 10  20
2.yesno框
格式:dialog –yesno  text  height  width
例子:
 
1
2
#dialog --title "yes/no" --no-shadow --yesno \
"Delete the file /tmp/chensiyao.txt?" 10 30
3.输入框
格式:dialog --inputbox text height width
例子:
 
1
2
3
# dialog --title "Input your name"  \
--inputbox "Please input your name:" 10 30  2> /tmp/name.txt  
#(这里的2>是将错误信息输出重定向到了/tmp/name.txt文件中)
4.密码框

格式:
dialog  --passwordbox text height width [init]
例子:
 
1
2
# dialog --title "Password"  --passwordbox \
"Please give a password for the new user:" 10 35

这样我们的密码就暴露出来了,是不是很不安全,所以通常我们会加上一个安全选项

--insecure   将每个字符用*来显示出来
 
1
2
# dialog  --title  "Password"  --insecure  \
--passwordbox  "Please  give  a  password  for the  new  user:"  10  30
5.文本框
格式:dialog --textbox file height width
例子:
 
1
#dialog --title "The fstab" --textbox /etc/fstab  17 40

6.菜单框
格式:dialog --menu text height width  menu-height tag1 item1 tag2 item2 …
例子:
 
1
2
#dialog --title "Pick a choice" --menu "Choose one" 12 35 5 \
1 "say hello to everyone" 2 "thanks for your support" 3 "exit"
7.Fselect框(文件选框)
格式:dialog --fselect filepath height width
例子:
 
1
#dialog --title "Pick one file" --fselect /root/ 7 40

8.复选框
格式:dialog  --checklist "Test" height width  menu-height  tag1 item1 tag2 item2 …
例子:

 
1
2
# dialog --backtitle "Checklist" --checklist "Test" 20 50 10 \
Memory Memory_Size 1 Dsik Disk_Size 2<b></b>

9.显示日历
格式:dialog --calendar "Date" height width day month year
例子:
#显示当前日期

 
1
# dialog --title "Calendar" --calendar "Date" 5 50

#显示指定日期

 
1
# dialog --title "Calendar" --calendar "Date" 5 50 1 2 2013
10.进度框架
格式:dialog --gauge text height width  [<percent>]
例子:
#固定进度显示

 
1
#dialog --title "installation pro" --gauge "installation" 10 30 10

#实时动度进度

 
1
2
#for i in {1..100} ;do echo $i;done | dialog --title \
"installation pro" --gauge "installation" 10 30
#编辑到脚本中
编辑一个gauge.sh 的脚本
内容如下:
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash  
# vim gauge.sh
declare -i PERCENT=0
(
        for I in /etc/*;do
                if [ $PERCENT -le 100 ];then
                        cp -r $I /tmp/test 2> /dev/null
                        echo "XXX"
                        echo "Copy the file $I ..."
                        echo "XXX"
                        echo $PERCENT  
                fi
        let PERCENT+=1
        sleep 0.1
        done
) | dialog --title "coping" --gauge "starting to copy files..." 6 50 0
 
#bash  gauge.sh  (执行脚本的时候注意修改权限)
 

11.from框架(表单)
格式:dialog --form text height width formheight [ label y x item y x flen ilen ] ...
其中
flen 表示field length,定义了:选定字段中显示的长度
ilen 表示 input-length, 定义了:在外地输入的数据允许的长度
使用up/down(或ctrl/ N,ctrl/ 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

综合应用示例:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash
yesno() {
dialog --title "First screen" --backtitle "Test Program" --clear --yesno \
"Start this test program or not ? \nThis decesion have to make by you. " 16 51
# yes is 0, no is 1 , esc is 255
result=$?
if [ $result -eq 1 ] ; then
exit 1;
elif [ $result -eq 255 ]; then
exit 255;
fi
username
}
username() {
cat /dev/null >/tmp/test.username
dialog --title "Second screen" --backtitle "Test Program" --clear --inputbox \
"Please input your username (default: hello) " 16 51 "hello" 2>/tmp/test.username
result=$?
if [ $result -eq 1 ] ; then
yesno
elif [ $result -eq 255 ]; then
exit 255;
fi
password
}
password() {
cat /dev/null >/tmp/test.password
dialog --insecure --title "Third screen" --backtitle "Test Program" --clear --passwordbox \
"Please input your password (default: 123456) " 16 51 "123456" 2>/tmp/test.password
result=$?
if [ $result -eq 1 ] ; then
username
elif [ $result -eq 255 ]; then
exit 255;
fi
occupation
}
occupation() {
cat /dev/null >/tmp/test.occupation
dialog --title "Forth screen" --backtitle "Test Program" --clear --menu \
"Please choose your occupation: (default: IT)" 16 51 3 \
IT "The worst occupation" \
CEO "The best occupation" \
Teacher "Not the best or worst" 2>/tmp/test.occupation
result=$?
if [ $result -eq 1 ] ; then
password
elif [ $result -eq 255 ]; then
exit 255;
fi
finish
}
finish() {
dialog --title "Fifth screen" --backtitle "Test Program" --clear --msgbox \
"Congratulations! The test program has finished!\n Username: $(cat /tmp/test.username)\n Password: $(cat /tmp/test.password)\n Occupation: $(cat /tmp/test.occupation)" 16 51
result=$?
if [ $result -eq 1 ] ; then
occupation
elif [ $result -eq 255 ]; then
exit 255;
fi
}
yesno
 
本文转自:http://gdcsy.blog.163.com/blog/static/1273436092013016069255/
本站整理:http://www.ttlsa.com/html/3085.html

shell & dialog的更多相关文章

  1. 关于JFace的自定义对话框(Dialog类)

    仅仅是使用MessageDialog,InputDialog等JFace中现成的对话框类是无法满足实际项目开发需要的. 很多时候都需要自己定制对话框,自定义对话框只要在Dialog类的基础上作扩展就行 ...

  2. 关于JFace中的进度条对话框(ProgressMonitorDialog类)

    在Windows操作系统中,最常用的进度条对话框就是文件复制时的弹出框,如果想让用户愉快的使用你开发 的软件,那么在执行某个较长时间的操作时候,就应该弹出一个进度条提示框,告诉用户程序正在做什么. 做 ...

  3. 关于JFace中的对话框MessageDialog类等其它类型对话框

    对话框是软件系统中最常用到的界面,对话框无处不在,从界面结构来说,对话框主要是由主体的界面组件和底部窗体按钮组成. 之前的例子中已经频繁的使用到了MessageDialog.openInformati ...

  4. 简介SWT Jface

    可以使用标准窗口小部件工具箱(Standard Widget Toolkit,SWT)和 JFace 库来开发用于 Eclipse 环境的图形用户界面,而且还可以将它们用于开发单独的 GUI 本机应用 ...

  5. 3java面试题 传智 发的 有用

    第一章内容介绍 20 第二章JavaSE基础 21 一.Java面向对象 21 1. 面向对象都有哪些特性以及你对这些特性的理解 21 2. 访问权限修饰符public.private.protect ...

  6. linux dialog详解(图形化shell)

    liunx 下的dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具.每个对话框提供的输出有两种形式:   1.  将所有输出到stderr 输出,不显示到屏幕.   2 ...

  7. dialog - 从 shell 显示对话框

    总览 (SYNOPSIS) dialog --clear dialog --create-rc file dialog --print-maxsize dialog common-options bo ...

  8. shell之dialog提示窗口

    dialog 提示窗口 1.msgbox     dialog --msgbox text 20 10 2.yesno     dialog --title "Please answer&q ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

随机推荐

  1. oracle函数,查询,事务

    函数包括:单行函数,多行函数(分组函数) 数值函数: --绝对值 select abs(-12.3) from dual; --向上取值 select ceil(5.3) from dual; --向 ...

  2. 解决在web项目使用log4j中无法将log信息写入文件

    这是log4j.properties中关于的配置 log4j.appender.appender2.File=F:/myeclipseworkspace2/SecondBook2/log/second ...

  3. 数据结构--树(遍历,红黑,B树)

    平时接触树还比较少,写一篇博文来积累一下树的相关知识. 很早之前在数据结构里面学的树的遍历. 前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍 ...

  4. 在VPS上部署fq环境

    VPS购买地址 1. 由于我选择的是CentOS 6 x86版本, 需要安装如下准备工具: git, gcc-c++, zlib-devel, openssl-devel, pcre-devel 2. ...

  5. Apache Spark技术实战之4 -- 利用Spark将json文件导入Cassandra

    欢迎转载,转载请注明出处. 概要 本文简要介绍如何使用spark-cassandra-connector将json文件导入到cassandra数据库,这是一个使用spark的综合性示例. 前提条件 假 ...

  6. 【Composer】实战操作一:使用库

    前言 前面我们简单介绍了composer的安装 以及 如何安装库 本文目的 主要实战讲解如何使用库,主要是PSR-0 和 PSR-4的区别,以及如何在代码中引用.关于PSR-0和PSR-4的具体区别可 ...

  7. JavaMail邮件开发

    一.只带有纯文本的邮件 代码事例如下: package com.lyh.sendemail; import java.util.Properties; import javax.mail.Messag ...

  8. overflow遭遇场景

    没有设置高度而由内容撑高的子div在遇到固定高度的父div,想做一个离上边缘有间距的效果,给padding-top会同时撑大父div,给margin-top会把父div拉下来,这时候的子div像是紧紧 ...

  9. JQuery1.11版本对prop和attr接口的含义分离导致问题分析

    问题背景 实验中, 在jquery1.7版本, attr("value")  和 val() 接口获取 input 控件的值, 都是一致的, 都是当前控件值. 但是 jquery1 ...

  10. ReentrantLock的实现语义与使用场景

    简介 ReentrantLock(重入锁)就是支持可重进入的锁,它表示该锁能支持一个线程对资源的重复加锁.另外还支持获取锁的公平和非公平选择ReentrantLock的实现不仅可以替代隐式的synch ...