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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章