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