標籤: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
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/D8/wKiom1UlEOihR9rNAAEaNwRwGEw427.jpg" title="01.png" alt="wKiom1UlEOihR9rNAAEaNwRwGEw427.jpg" />
在是選項按下斷行符號後
# echo $?0
如果在否選項按下斷行符號後
# echo $?1# dialog --backtitle "First Window" --title "Create User" --inputbox "HostName." 10 30 #加上--inputbox選項後,就可以輸入資訊了
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/D4/wKioL1UlEv3i5pTrAAEic7zQ5Mg529.jpg" style="float:none;" title="02.png" alt="wKioL1UlEv3i5pTrAAEic7zQ5Mg529.jpg" />
還沒有按斷行符號
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/D8/wKiom1UlEbXDSd7kAAFBBNkvzYQ946.jpg" style="float:none;" title="03.png" alt="wKiom1UlEbXDSd7kAAFBBNkvzYQ946.jpg" />
# Hostname=`dialog --stdout --backtitle "First Window" --title "Create User" --inputbox "Hostname." 10 30`
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D4/wKioL1UlGWeDwre6AAEpe3iw68A329.jpg" title="05.png" alt="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 $Usernamefi# bash -n adduser.sh# bash adduser.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D4/wKioL1UlHWHQuWeqAAC3jFWr9UM034.jpg" title="06.png" alt="wKioL1UlHWHQuWeqAAC3jFWr9UM034.jpg" />
# vim adduser.shif [ $RETVAL -eq 0 -a -n "$Username" ]; then #把$Username用引號引起來
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D4/wKioL1UlIG_xx_raAAErJy9IBYM440.jpg" title="07.png" alt="wKioL1UlIG_xx_raAAErJy9IBYM440.jpg" />
為了不讓其顯示這些資訊,而且如果使用者存在,怎麼辦?使用者存在了,你一上來就建立使用者也不行
# vim adduser.sh
if [ $RETVAL -eq 0 -a -n "$Username" ] && ! id $Username &> /dev/null; then
# bash adduser.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D9/wKiom1UlItmiwVlOAAFD_aOlLt4481.jpg" title="08.png" alt="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 fifi# bash adduser.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D9/wKiom1UlJILg_mfEAACmq-IbTx0501.jpg" style="float:none;" title="09.png" alt="wKiom1UlJILg_mfEAACmq-IbTx0501.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/D4/wKioL1UlJcvh6Ci3AACJNTDtpl8743.jpg" style="float:none;" title="10.png" alt="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
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D4/wKioL1UlKnHjpJeuAACZOeuZXxs058.jpg" style="float:none;" title="11.png" alt="wKioL1UlKnHjpJeuAACZOeuZXxs058.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D9/wKiom1UlKSmgPesxAACRrvHh0ss909.jpg" style="float:none;" title="12.png" alt="wKiom1UlKSmgPesxAACRrvHh0ss909.jpg" />
輸入密碼時,沒有顯示任何資訊
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/D4/wKioL1UlKnGRSD8EAACB8lkV4DE979.jpg" style="float:none;" title="13.png" alt="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
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D4/wKioL1UlLATClm6ZAACUnAcXG1c504.jpg" style="float:none;" title="14.png" alt="wKioL1UlLATClm6ZAACUnAcXG1c504.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/D4/wKioL1UlLAST8KbQAACZwIUwH5w871.jpg" style="float:none;" title="15.png" alt="wKioL1UlLAST8KbQAACZwIUwH5w871.jpg" />
現在顯示*號了
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/D9/wKiom1UlKrzyjjNoAACAX9VkHKg737.jpg" style="float:none;" title="16.png" alt="wKiom1UlKrzyjjNoAACAX9VkHKg737.jpg" />
如果使用者沒有給密碼怎麼辦
# vim adduser.sh
# dialog --title "Cal" --calendar "Canlendar" 6 45 8 4 2015
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/D6/wKioL1UlSy2zUpmvAAE9Tfa6m44771.jpg" title="01.png" alt="wKioL1UlSy2zUpmvAAE9Tfa6m44771.jpg" />
# dialog --title "Checklist" --checklist "Yourself" 10 30 2 h hight no w width yes
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/DB/wKiom1UlSpniaM5MAACoSy0x7QI250.jpg" title="01.png" alt="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 $SourceSource=`echo $Source | tr -d ‘"‘`for I in $Source; do echo ${Dir[$I]}done# bash backup.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/DB/wKiom1UlS2HzkoprAAD-VVnuJSQ922.jpg" title="01.png" alt="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
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/5D/DB/wKiom1UlTpfDHjaNAAD9YJT9PpQ191.jpg" style="float:none;" title="01.png" alt="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
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/D6/wKioL1UlT-DzimltAAECnPJR_rc456.jpg" style="float:none;" title="02.png" alt="wKioL1UlT-DzimltAAECnPJR_rc456.jpg" />
Mem: 3776 2483 1292 144 661 575# bash showusage.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/DB/wKiom1UlTpfCW1rHAADy6dtRbig589.jpg" style="float:none;" title="03.png" alt="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.2done) | dialog --clear --gauge "Gauge" 8 60 0# bash gauge.sh
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/5D/DB/wKiom1UlUCvw-xKXAACVVmzj1l0393.jpg" style="float:none;" title="01.png" alt="wKiom1UlUCvw-xKXAACVVmzj1l0393.jpg" />
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D6/wKioL1UlUXSxa1GXAACW2J8m4sM553.jpg" style="float:none;" title="02.png" alt="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
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/5D/D6/wKioL1UlUqXAyf4vAAEw3CkvTA4968.jpg" title="01.png" alt="wKioL1UlUqXAyf4vAAEw3CkvTA4968.jpg" />
本文出自 “三哥” 部落格,請務必保留此出處http://523958392.blog.51cto.com/9871195/1631380
dialog視窗編程的入門使用