❀dialog命令运用于linux❀

目录

❀dialog命令运用于linux❀

msgbox部件(消息框)

yesno部件(yesno框)

inputbox部件(输入文本框)

textbox部件(文本框)

fselect部件(文件选框)

passwordbox部件(密码框)

checklist部件(复选框)

calendar部件(显示日历)

gauge部件(进度框架)

form部件(表单)

综合应用示例


❀dialog命令运用于linux❀

功能说明:dialog 工具是一个可以和shell脚本配合使用的文本界面下的创建对话框的工具。

(ps.dialog实用程序是基于ncurses库的。Ncurses是一个用于在文本终端上创建图形用户界面的库,它允许开发者创建基于文本的用户界面,而无需依赖图形环境或窗口系统。这使得ncurses库非常适合在命令行环境下创建交互式的用户界面。dialog实用程序利用ncurses库提供的功能,允许用户在终端中以对话框的形式进行交互。它可以用于创建各种对话框,如菜单、输入框、消息框等,使得用户能够在命令行环境下进行简单的图形化交互操作。Ncurses通常被发音为 "en-curses"。 "en" 是字母 "n" 的读音,而 "curses" 的发音类似于英文中的 "curses"。因此,它的发音类似于 "en-curses"。)  

基本语法:通用选项 common options:(这个选项来设置dialog box的背景,颜色和标题等)[--title <title>] 指定将在对话框的上方显示的标题字符串 

通用选项:

[ --backtitle ]  背景的标题

[--title ]   标题

[--stdout ]   改为正常输出流,可以使用变量获dialog命令的执行结果,dialog的默认输出流为2>

[--insecure ]  不安全的,显示星号(可以看到密码位数)

[--begin y x ]   窗体左上角处于屏幕的位置 例:--begin 4 10

[--colors ]     文本的颜色:0-7,1表示红色 ;\Z开始 ;\Zn结束

[--defaultno ]   默认为no yesno标签,对于yesno窗体类型,光标默认在no标签上

[--default-item string ]   默认条目,menu窗体类型中使用

[--nocancel ]           取消cancel键

[ --nook ]              取消ok键

[ --no-shadow ]         取消阴影

[ --ok-label string ]       OK标签上不显示OK,而显示你输入的文本信息

[ --exit-label string ]     可以添加一个exit的标签

[ --timeout secs ]         超时时间间隔,秒

[ --extra-button ]      多添加一个按钮

[ --extra-labrl string ]   新增按钮上显示的内容,那这个按钮的功能这需要自己实现?用不来

部 件 描 述

----------------------------------------------------------------

calendar 提供选择日期的日历

checklist 显示多个选项(其中每个选项都能打开或关闭

form 构建一个带有标签以及文本字段可以填写内容)的表单

fselect 提供一个文件选择窗口来浏览选择文件

gauge  显示完成的百分比进度条

infobox 显示一条消息,但不用等待回应

inputbox 提供一个输入文本用的文本表单

inputmenu  提供一个可编辑的菜单

menu 显示可选择的一系列选项

msgbox 显示一条消息,并要求用户选择OK按钮

pause 显示一个进度条来显示暂定期间的状态

passwordbox 显示一个文本框,但会隐藏输入的文本

passwordform  显示一个带标签隐藏文本字段的表单

radiolist  提供一组菜单选项,但只能选择其中一个

tailbox  用tail命令在滚动窗口中显示文件的内容

tailboxbg  跟tailbox一样,但是在后台模式中运行

textbox  在滚动窗口中显示文件的内容

timebox  提供一个选择小时、分钟和秒数的窗口

yesno 提供一条带有Yes和No按钮的简单消息

要在命令行上指定某个特定的部件,需使用双破折线格式。

dialog --widget parameters

widget是部件名, parameters定义了部件窗口的大小以及部件需要的文本。每个dialog部件都提供了两种形式的输出:

①使用STDERR

②使用退出状态码

可以通过dialog命令的退出状态码来确定用户选择的按钮。如果选择了Yes或OK按钮,dialog命令会返回退出状态码0。如果选择了Cancel或No按钮,dialog命令会返回退出状态码1。可以用标准的$?变量来确定dialog部件中具体选择了哪个按钮。

如果部件返回了数据,比如菜单选择,那么dialog命令会将数据发送到STDERR。可以用标准的bash shell方法来将STDERR输出重定向到另一个文件或文件描述符中。

dialog --inputbox "Enter your age:" 10 20 2>age.txt

一些其他的选项描述:

--add-widget 继续下个对话框,直到按下Esc或Cancel按钮

--aspect ratio 指定窗口宽度和高度的宽高比

--backtitle title 指定显示在屏幕顶部背景上的标题

--begin x y 指定窗口左上角的起始位置

--cancel-label label 指定Cancel按钮的替代标签

--clear 用默认的对话背景色来清空屏幕内容

--colors 在对话文本中嵌入ANSI色彩编码

--cr-wrap 在对话文本中允许使用换行符并强制换行

--create-rc file 将示例配置文件的内容复制到指定的file文件中(1)

--defaultno 将yes/no对话框的默认答案设为No

--default-item string 设定复选列表、表单或菜单对话中的默认项

--exit-label label 指定Exit按钮的替代标签

--extra-button 在OK按钮和Cancel按钮之间显示一个额外按钮

--extra-label label 指定额外按钮的替代标签

--help 显示dialog命令的帮助信息

--help-button 在OK按钮和Cancel按钮后显示一个Help按钮

--help-label label 指定Help按钮的替代标签

--help-status 当选定Help按钮后,在帮助信息后写入多选列表、单选列表或表单信息

--ignore 忽略dialog不能识别的选项

--input-fd fd 指定STDIN之外的另一个文件描述符

--insecure 在password部件中键入内容时显示星号

--item-help 为多选列表、单选列表或菜单中的每个标号在屏幕的底部添加一个帮助栏

--keep-window 不要清除屏幕上显示过的部件

--max-input size 指定输入的最大字符串长度。默认为2048

--nocancel 隐藏Cancel按钮

--no-collapse 不要将对话文本中的制表符转换成空格

--no-kill 将tailboxbg对话放到后台,并禁止该进程的SIGHUP信号

--no-label label 为No按钮指定替代标签

--no-shadow 不要显示对话窗口的阴影效果

--ok-label label 指定OK按钮的替代标签

--output-fd fd 指定除STDERR之外的另一个输出文件描述符

--print-maxsize 将对话窗口的最大尺寸打印到输出中

--print-size 将每个对话窗口的大小打印到输出中

--print-version 将dialog的版本号打印到输出中

--separate-output 一次一行地输出checklist部件的结果,不使用引号

--separator string 指定用于分隔部件输出的字符串

--separate-widget string 指定用于分隔部件输出的字符串

--shadow 在每个窗口的右下角绘制阴影

--single-quoted 需要时对多选列表的输出采用单引号

--sleep sec 在处理完对话窗口之后延迟指定的秒数

--stderr 将输出发送到STDERR(默认行为)

--stdout 将输出发送到STDOUT

--tab-correct 将制表符转换成空格

--tab-len n 指定一个制表符占用的空格数(默认为8)

--timeout sec 指定无用户输入时, sec秒后退出并返回错误代码

--title title 指定对话窗口的标题

--trim 从对话文本中删除前导空格和换行符

--visit-items 修改对话窗口中制表符的停留位置,使其包括选项列表

--yes-label label 为Yes按钮指定替代标签

实例:

msgbox部件(消息框)

msgbox部件是对话框中最常见的类型。它会在窗口中显示一条简单的消息,直到用户单击OK按钮后才消失。使用msgbox部件时要用下面的格式。

dialog --msgbox text height width

如果想在窗口顶部放一个标题,也可以用 --title参数,后接作为标题的文本。

# dialog --title "标题" --msgbox "这是文本内容~" 10 25

yesno部件(yesno框)

yesno部件进一步扩展了msgbox部件的功能,允许用户对窗口中显示的问题选择yes或no。它会在窗口底部生成两个按钮:一个是Yes,一个是No。用户可以用鼠标、制表符键或者键盘方向键来切换按钮。要选择按钮的话,用户可以按下空格键或者回车键

如果用户选择了No按钮,退出状态码是1;如果选择了Yes按钮,退出状态码就是0

# dialog --title "标题" --yesno "yes还是no?" 10 25;echo $?

选择no退出状态码是1:

选择yes退出状态码是0:

inputbox部件(输入文本框)

inputbox部件为用户提供了一个简单的文本框区域来输入文本字符串。 dialog命令会将文本字符串的值发给STDERR。你必须重定向STDERR来获取用户输入。

inputbox提供了两个按钮: OK和Cancel。如果选择了OK按钮,命令的退出状态码就是0;反之,退出状态码就会是1。

# dialog --inputbox "Enter your age:" 10 25 2>age.txt;echo $?

# cat age.txt

21

还可以直接在前面加一个参数--stdout,直接改为正常输出流,可以使用变量获dialog命令的执行结果:

# dialog --stdout --inputbox "Enter your age:" 10 25 >age1.txt;echo $?

# cat age1.txt

23

textbox部件(文本框)

textbox部件是在窗口中显示大量信息的极佳办法。它会生成一个滚动窗口来显示由参数所指定的文件中的文本。

# dialog --textbox /etc/passwd 15 45

# dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2> test.txt

fselect部件(文件选框)

fselect部件在处理文件名时非常方便。不用强制用户键入文件名,你就可以用fselect部件来浏览文件的位置并选择文件。

fselect选项后的第一个参数是窗口中使用的起始目录位置。 fselect部件窗口由左侧的目录列表右侧的文件列表

# dialog --title "Select a file" --fselect $HOME/ 10 50 2>file.txt

passwordbox部件(密码框)

格式: dialog  --passwordbox text height width [init]

# 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

checklist部件(复选框)

格式:dialog  --checklist "Test" height width  menu-height  tag1 item1 tag2 item2 …

例子:

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

calendar部件(显示日历)

格式: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  #显示指定日期

gauge部件(进度框架)

格式: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  #实时动度进度

编辑一个gauge.sh 的脚本内容如下: 

#!/bin/bash       # 指定脚本使用的解释器为 Bash
declare -i PERCENT=0   #定义一个整型变量 PERCENT 并初始化为 0

(    #开始一个子 shell
        for I in /etc/*;do    #遍历 /etc 目录下的所有文件
                if [ $PERCENT -le 100 ];then    #如果进度条未达到 100%,则执行以下命令
                        cp -r $I /tmp/test 2> /dev/null#将当前文件复制到 `/tmp/test` 目录中,忽略错误信息
                        echo "XXX"   #输出分隔符
                        echo "Copy the file $I ..."      #输出正在复制的文件名
                        echo "XXX"     #输出分隔符
                        echo $PERCENT    #输出当前进度百分比
                fi
        let PERCENT+=1   # 将进度百分比加 1
        sleep 0.1    #等待 0.1 秒
        done  #结束循环
) | dialog --title "coping" --gauge "starting to copy files..." 6 50 0  
# )  结束子 shell
# | 将子 shell 的输出传递给下一个命令
#显示进度条对话框,标题为 "coping",提示信息为 "starting to copy files...",大小为 6 行 50 列,初始进度为 0

form部件(表单)

格式: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)dialog启动时会先去检查是否设置了DIALOGRC环境变量,该变量会保存配置文件名信息。如果未设置该变量或未找到该文件,它会将$HOME/.dialogrc作为配置文件。如果这个文件还不存在的话,就尝试查找编译时指定的GLOBALRC文件,也就是/etc/dialogrc。如果这个文件也不存在的话,就用编译时的默认值。

2)--backtitle选项是为脚本中的菜单创建公共标题的简便办法。如果你为每个对话窗口都指定了该选项,那么它在你的应用中就会保持一致,这样会让脚本看起来更专业。

综合应用示例

#!/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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/218133.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python---面向对象的基本概念

对象 对象&#xff0c;object&#xff0c;现实业务逻辑的一个动作实体就对应着OOP编程中的一个对象&#xff01; 所以&#xff1a;① 对象使用属性&#xff08;property&#xff09;保存数据&#xff01;② 对象使用方法&#xff08;method&#xff09;管理数据&#xff01; …

PyQt实战 创建一个PyQt5项目

前后端分离 参考链接 PyQt5实战&#xff08;二&#xff09;&#xff1a;创建一个PyQt5项目_pyqt5实战项目_笨鸟未必先飞的博客-CSDN博客 项目目录 创建一个QT项目 调用pyuic工具将dialog.ui文件编译为Python程序文件ui_dialog.py。 # -*- coding: utf-8 -*-# Form implemen…

element-ui upload组件中将file文件数据转成二进制流数据格式

方法一 handleBeforeUpload (file)const reader new FileReader()reader.readAsArrayBuffer(file)reader.onload async function (theFile) {const binary new Blob([theFile.target.result]) // 转成二进制流数据 即binary数据格式}}方法二 const aBlob new Blob([file],…

【C语言】深入理解指针(1)

目录 前言 &#xff08;一&#xff09;内存与地址 从实际生活出发 地址 内存 内存与地址关系密切 &#xff08;二&#xff09;指针变量 指针变量与取地址操作符 指针变量与解引用操作符 指针的大小 指针的运算 指针 - 整数 指针-指针 指针的关系运算 指针的类型的…

2022 China Collegiate Programming Contest (CCPC) Guilin Site

A.Lily Problem - A - Codeforces 题意 思路 数所有周围没L的格子 #include <bits/stdc.h>using i64 long long;constexpr int N 2e5 10; constexpr int mod 1e9 7; constexpr int Inf 0x3f3f3f3f; constexpr double eps 1e-10;std::string s;int n;void solv…

vue3 + TS 项目中使用pinia-plugin-persistedstate持久化缓存

Vue 3和Pinia是一对非常好的组合&#xff0c;可以帮助你构建现代化的Vue应用程序。而pinia-plugin-persistedstate是一个用于在Pinia存储中实现状态持久化的插件。下面我将详细介绍如何在Vue 3应用程序中使用Pinia和pinia-plugin-persistedstate模块。 首先&#xff0c;确保你…

Redis高可用之Sentinel哨兵模式

一、背景与简介 Redis关于高可用与分布式有三个与之相关的运维部署模式。分别是主从复制master-slave模式、哨兵Sentinel模式以及集群Cluster模式。 这三者都有各自的优缺点以及所应对的场景、对应的业务使用量与公司体量。 1、主从master-slave模式 【介绍】 这种模式可以采用…

Vue学习计划--Vue2(二)Vue代理方式

Vue data中的两种方式 对象式 data:{}函数式 data(){return {} }示例&#xff1a; <body><div id"app">{{ name }} {{ age}} {{$options}}<input type"text" v-model"value"></div><script>let vm new Vue({el: …

【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】

这里写自定义目录标题 一、什么是STL二、STL的版本1. 原始版本2. P. J. 版本3. RW版本★ 4. SGI版本 三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷 一、什么是STL STL ( standard template libaray - 标准模板库 )&#xff1a;是C标准库 的重要组成部分&…

nodejs+vue+微信小程序+python+PHP就业求职招聘信息平台的设计与实现-计算机毕业设计推荐

主要有前端和后端&#xff0c;前端显示整个网站的信息&#xff0c;后端主要对前端和网站的基本信息进行管理。用户端模块主要是系统中普通用户在注册、登录系统可以看到自己的基本信息&#xff0c;维护自己的信息&#xff1b;管理员端模块主要是管理员登录后对整个系统相关操作…

【算法】算法题-20231205

这里写目录标题 一、LCS 01. 下载插件二、已知一个由数字组成的列表&#xff0c;请将列表中的所有0移到右侧三、实现一个trim()函数&#xff0c;去除字符串首尾的空格&#xff08;不能使用strip()方法&#xff09; 一、LCS 01. 下载插件 简单 小扣打算给自己的 VS code 安装使…

自动化巡检实现方法 (一)------- 思路概述

一、自动化巡检需要会的技能 1、因为巡检要求一天24小时全天在线&#xff0c;因此巡检程序程序一定会放在服务器上跑&#xff0c;所以要对linux操作熟悉哦 2、巡检的代码要在git上管理&#xff0c;所以git的基本操作要熟悉 3、为了更方便不会代码的同学操作&#xff0c;所以整个…

LaTex入门简明教程

文章目录 写在前面安装Texlive的安装TeXstudio 的安装 LaTex 的使用节指令图指令表指令公式指令参考文献指令引用指令TeXstudio 编译 LaTex 的 \label{} 写法建议最后 写在前面 这篇文章面向没有任何 LaTex 基础的小白&#xff0c;主要讲解了 LaTex 的安装和使用。读完文章之后…

父类的@Autowired字段被继承后能否被注入

可以 示例 父类&#xff1a;Animal.class public class Animal {Autowiredprivate PrometheusAlertService prometheusAlertService;public void eat(){System.out.println("eat food");}} 子类&#xff1a;Dog.class Service public class Dog extends Animal …

Vue3 组合式实现 带连接线的Tree型 架构图(一级树形图)

创建组件名称 TreeNodeView.vue <template><div class"tree-node"><div class"node">{{ rootNodeName }}</div><div class"children" :style"childrenLineStyle"><div class"child-node"…

Affinity VS PS 2024最新功能详细对比?Affinity Photo与Photoshop比哪家强?

多年来&#xff0c;ps已经有了大量竞争对手。然而每次Photoshop都足以保持其领先地位。开源GIMP和Pixelmator都试图取代Photoshop&#xff0c;不过Photoshop对此不屑一顾。英国Serif公司研发了一款名为Affinity Photo的软件&#xff0c;声称可以叫板ps。今天我们看看有最有可能…

12.4作业

1. #include <iostream>using namespace std;class Sofa { private:string sitting;string *lying; public:Sofa(){cout << "Sofa::无参构造函数" << endl;}Sofa(string sitting,string lying):sitting(sitting),lying(new string(lying)){cout &…

ffmpeg格式转换 免费使用视频格式转换教程

下载安装 首先去官网下载ffmpeg的软件包https://ffmpeg.org/ 如果是windows可以在直接下载编译好的软件包 https://www.gyan.dev/ffmpeg/builds/ 进入解压后的目录&#xff0c;子目录bin中的ffmpeg.exe就是我们要使用的转换器 视频信息查看 打开cmd控制台&#xff0c;从…

【开源】基于JAVA语言的天沐瑜伽馆管理系统

项目编号&#xff1a; S 039 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S039&#xff0c;文末获取源码。} 项目编号&#xff1a;S039&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课…

Latex去掉参考文献后面的参考文献所在页(去掉参考文献的反向超链接)

如下&#xff1a; 在使用latex插入参考文献的时候&#xff0c;最后面总是会出现这种代号。这是表明的是这条参考文献所在的页码&#xff0c;并且点击之后可以跳转到该页。正式来讲&#xff0c;这个叫超链接的BACKREF。若要去掉&#xff0c;只需要在引用hyperref的时候去掉page…