标签:dialog 窗体编程
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 $Username echo $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; then useradd $Username echo $Username | 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 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; do echo ${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};do echo "XXX" echo "Percent: ${Percent}%" echo "XXX" echo $Percent sleep 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
本文出自 “三哥” 博客,请务必保留此出处http://523958392.blog.51cto.com/9871195/1631380
标签:dialog 窗体编程
原文地址:http://523958392.blog.51cto.com/9871195/1631380