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

dialog: 命令

窗口元素:

     文本框

     单选框

     复选框

     进度条

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

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

wKiom1UlEOihR9rNAAEaNwRwGEw427.jpg

在是选项按下回车后

# echo $?
0

如果在否选项按下回车后

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

wKioL1UlEv3i5pTrAAEic7zQ5Mg529.jpg

还没有按回车

wKiom1UlEbXDSd7kAAFBBNkvzYQ946.jpg

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

wKioL1UlGWeDwre6AAEpe3iw68A329.jpg

这次就不在后面显示了

# 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

wKioL1UlHWHQuWeqAAC3jFWr9UM034.jpg

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

wKioL1UlIG_xx_raAAErJy9IBYM440.jpg

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

# vim adduser.sh

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

# bash adduser.sh

wKiom1UlItmiwVlOAAFD_aOlLt4481.jpg

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

# 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

wKiom1UlJILg_mfEAACmq-IbTx0501.jpg

wKioL1UlJcvh6Ci3AACJNTDtpl8743.jpg



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

# 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 

wKioL1UlKnHjpJeuAACZOeuZXxs058.jpg

wKiom1UlKSmgPesxAACRrvHh0ss909.jpg

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

wKioL1UlKnGRSD8EAACB8lkV4DE979.jpg

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

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

wKioL1UlLATClm6ZAACUnAcXG1c504.jpg

wKioL1UlLAST8KbQAACZwIUwH5w871.jpg

现在显示*号了

wKiom1UlKrzyjjNoAACAX9VkHKg737.jpg

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

# vim adduser.sh




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

wKioL1UlSy2zUpmvAAE9Tfa6m44771.jpg

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

wKiom1UlSpniaM5MAACoSy0x7QI250.jpg

# 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

wKiom1UlS2HzkoprAAD-VVnuJSQ922.jpg

会显示

"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

wKiom1UlTpfDHjaNAAD9YJT9PpQ191.jpg

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

wKioL1UlT-DzimltAAECnPJR_rc456.jpg

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

wKiom1UlTpfCW1rHAADy6dtRbig589.jpg

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

wKiom1UlUCvw-xKXAACVVmzj1l0393.jpg

wKioL1UlUXSxa1GXAACW2J8m4sM553.jpg

# 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

wKioL1UlUqXAyf4vAAEw3CkvTA4968.jpg