dialog:能够动态生成一个文本窗口,并且这个窗口支持众多的窗口元素。

dialog: 命令

窗口元素:

文本框

单选框

复选框

进度条

dialog所能够提供给我们的窗体,选择完成以后(敲了回车之后),其相关信息没有输出到标准输出,而是输出到错误输出

# yum -y install dialog
# dialog --print-maxsize  #这个只是自己的值,换个人大小可能就不一样了,所以以后设置的时候尽可能不要把窗口设置的过大
MaxSize: 35, 134
# dialog --backtitle "First Window" --title "Create User" --yesno "HostName." 10 30

在是选项按下回车后

# echo $?
0

如果在否选项按下回车后

# echo $?
1
# dialog --backtitle "First Window" --title "Create User" --inputbox "HostName." 10 30    #加上--inputbox选项后,就可以输入信息了

还没有按回车

# Hostname=`dialog --stdout --backtitle "First Window" --title "Create User" --inputbox "Hostname." 10 30`

这次就不在后面显示了

# echo $Hostname
hostname

注:先把所有的输出定向到标准输出(--stdout)上来,再使用一个变量获取命令的执行结果。既然这样,我们就能够在脚本中调用了

如何在脚本中使用dialog

例:创建用户

# vim adduser.sh
#!/bin/bash
#
Username=`dialog --stdout --backtitle "Add a user." --title "Username" --inputbox "Please input a username: " 10 30`
RETVAL=$?
if [ $RETVAL -eq 0 -a -n $Username ]; then      #判定$?,如果其值等于0,且用户名不为空 useradd $Usernameecho $Username | passwd --stdin $Username
fi
# bash -n adduser.sh
# bash adduser.sh

# vim adduser.sh
if [ $RETVAL -eq 0 -a -n "$Username" ]; then    #把$Username用引号引起来

为了不让其显示这些信息,而且如果用户存在,怎么办?用户存在了,你一上来就创建用户也不行

# vim adduser.sh

if [ $RETVAL -eq 0 -a -n "$Username" ] && ! id $Username &> /dev/null; then

# bash adduser.sh

没有任何信息返回,应该是成功了。但是这样也不知道是创建成功还是由于用户以存在而没有创建成功,则再改一下

# vim adduser.sh
#!/bin/bash
#
Username=`dialog --stdout --backtitle "Add a user." --title "Username" --inputbox "Please input a username: " 10 30`
RETVAL=$?
if [ $RETVAL -eq 0 -a -n "$Username" ]; then   if ! id $Username &> /dev/null; thenuseradd $Usernameecho $Username | passwd --stdin $Username &> /dev/nulldialog --backtitle "Add a user." --title "Add a user." --msgbox "Add user $Username finished." 10 30elsedialog --backtitle "Add a user." --title "Add a user." --msgbox "$Username is already created." 10 30fi
fi
# bash adduser.sh

现在来实现输入账号、密码

# vim adduser.sh

#!/bin/bash

#

Username=`dialog --stdout --backtitle "Add a user." --title "Username" --inputbox "Please input a username: " 10 30`

RETVAL=$?

if [ $RETVAL -eq 0 -a -n "$Username" ]; then    #判定$?,如果其值等于0,且用户名不为空,且当前主机上不存在这个用户

if ! id $Username &> /dev/null; then

useradd $Username

Pass=`dialog --stdout --backtitle "Password for $Username" --title "Passward" --passwordbox "Please enter the password: " 10 30`

echo $Pass | passwd --stdin $Username &> /dev/null

dialog --backtitle "Add a user." --title "Add a user." --msgbox "Add user $Username finished." 10 30

else

dialog --backtitle "Add a user." --title "Add a user." --msgbox "$Username is already created." 10 30

fi

fi

# bash -n adduser.sh

# bash adduser.sh

输入密码时,没有显示任何信息

如果想让用户在输入密码时显示*号

# vim adduser.sh
Pass=`dialog --stdout --backtitle "Password for $Username" --title "Passward" --insecure --passwordbox "Please enter the password: " 10 30`
#加入了--insecure选项
# bash adduser.sh

现在显示*号了

如果用户没有给密码怎么办

# vim adduser.sh

# dialog --title "Cal" --calendar "Canlendar" 6 45 8 4 2015

# dialog --title "Checklist" --checklist "Yourself" 10 30 2 h hight no w width yes

# vim backup.sh
#!/bin/bash
#
Dir=('/etc/httpd' '/etc/pam.d' '/etc/vsftpd')
Source=`dialog --stdout --title "Backup" --checklist "Choose the dir you want to backup: " 10 50 3 0 /etc/httpd 0 1 /etc/pam.d 1 2 /etc/vsftpd 0`
echo $Source
Source=`echo $Source | tr -d '"'`
for I in $Source; doecho ${Dir[$I]}
done
# bash backup.sh

会显示

"0" "2"
/etc/httpd
/etc/vsftpd
# vim showusage.sh
#!/bin/bash
#
ShowItem=`dialog --stdout --title "Show Usages" --menu "Choose the Usage you want: " 12 35 6 1 "Show disk usages" 2 "Show physical memory usages" 3 "Show swap usages" 4 "quit"`case $ShowItem in
"1")df -lh;;
"2")free -m | grep "^Me";;
"3")free -m | grep "^Sw";;
"4")exit;;
esac
# bash showusage.sh

Filesystem                Size  Used Avail Use% Mounted on
/dev/sda2                  48G   23G   24G  50% /
tmpfs                     1.9G   21M  1.9G   2% /dev/shm
/dev/sda1                 190M   51M  129M  29% /boot
/dev/mapper/myvg-mydata   9.8G   54M  9.2G   1% /mydata
# bash showusage.sh

Mem:          3776       2483       1292        144        661        575
# bash showusage.sh

Swap:         9999        182       9817
# vim gauge.sh
#!/bin/bash
#
(for Percent in {1..100};doecho "XXX"echo "Percent: ${Percent}%"echo "XXX"echo $Percentsleep 0.2
done) | dialog --clear --gauge "Gauge" 8 60 0
# bash gauge.sh

# 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

转载于:https://blog.51cto.com/523958392/1631380

dialog窗口编程的入门使用相关推荐

  1. python可视化窗口编程-Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sys from PyQt5.QtWidgets import QWidget,QApplicat ...

  2. python编程 入门到实践-终于懂了python编程从入门到实践

    Python语言是一种典型的脚本语言,简洁,语法约束少,接近人类语言.有丰富的数据结构,例如列表.字典.集合等.具有可移植性,支持面向过程和面向对象编程,并且开源.以下是小编为你整理的python编程 ...

  3. opengl编程从入门到精通-hello,window

    窗口 程序中使用的glad.c和glad.h源码: 链接: https://pan.baidu.com/s/1TmtM7O8J4aTnfP6elIgs7g 密码: g5go github源码仓库 op ...

  4. OpenGL编程轻松入门(一)

    OpenGL编程轻松入门(一) (由同事黄燕创作)   本文介绍了有关OpenGL的基本知识,主要涉及颜色.绘制几何体.坐标变换.堆栈操作.显示列表.光照和材质.纹理映射.特殊效果.曲面和曲线的绘制. ...

  5. c++整理程序 dev_C编程从入门到实践:C语言开发工具详解(2)

    DEV C++是一款经典的轻量级C语言开发工具,其安装大小只有几十兆,并且具有图形视图界面,操作比较容易.在DEV C++编码界面中可以使用复制和粘贴等命令,这提高了开发效率. 2.3.1安装DEV ...

  6. pythonwhile循环love_input和while循环——Python编程从入门到实践

    Python Python开发 Python语言 input和while循环--Python编程从入门到实践 input( ) input()函数:让程序运行暂停,等待用户输入. message = ...

  7. C++网络编程快速入门(四):EPOLL模型使用

    目录 基本使用方法 step1:创建epollfd step2:将fd绑定到epollfd step3:调用epoll_wait检测事件 epoll_wait与poll.select区别所在 水平触发 ...

  8. python编程 从入门到实践-终于懂了python编程从入门到实践

    Python语言是一种典型的脚本语言,简洁,语法约束少,接近人类语言.有丰富的数据结构,例如列表.字典.集合等.具有可移植性,支持面向过程和面向对象编程,并且开源.以下是小编为你整理的python编程 ...

  9. 《Linux C编程从入门到精通》——第 1 章 Linux基础 1.1Linux的起源、发展和分类...

    本节书摘来自异步社区<Linux C编程从入门到精通>一书中的第1章,第1.1节,作者:宋磊 , 程钢著,更多章节内容可以访问云栖社区"异步社区"公众号查看 第 1 章 ...

最新文章

  1. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[上]:采用管道处理请求...
  2. 【数学和算法】初识卡尔曼滤波器(二)
  3. 中国石材胶市场需求现状调研与前景预测分析报告2022版
  4. 在.net 中依据页的角色验证方式产生相匹配的菜单
  5. 2纳米芯片问世!芯片性能要起飞?!
  6. hook xposed 自定义类_【开始学习React Hook(1)】Hook之useState
  7. 土地利用覆被变化的概念_欠压实概念极其荒谬
  8. 判断 json html标签,javascript如何判断是否为json?
  9. “万物控制”是物联网下一个挑战
  10. 网络协议学习---LLDP协议学习
  11. 2020年机修钳工(中级)考试报名及机修钳工(中级)免费试题
  12. wordpress模板_如何在15分钟内定制WordPress模板
  13. 里恩EDC详解临床研究常用的设计类型
  14. java 阶梯_Java if-else-if阶梯语句
  15. UVA 1416 最短路
  16. Get和Post请求参数格式
  17. 关于接口连续调用,查询数据库数据不一致的情况
  18. Java中的偏向锁是什么
  19. 读书寄语:慎独自律,学思并重
  20. iPhone 13系列电池信息曝光,续航稳了

热门文章

  1. 数据分析师mysql基础_数据分析师之mysql入门——数据检索
  2. flex布局实现叠在另一个div之上_CSS3 flex弹性伸缩布局[上]
  3. cocos 时间函数需要什么引用_与时间赛跑:微盟的数据恢复为什么需要这么长时间...
  4. Language modeling tutorial in torchtext
  5. 图解TCPIP-DNS
  6. 20 Alarms, sigaction(), and Reentrant System Calls
  7. scrapy crawlspider
  8. MySQL json-table-functions
  9. C++ 内建函数对象
  10. python log