linux 图形化 shell dialog

Posted on Posted in command
Tips: 本文创建于2016年5月30日,已超过 2 年,内容或图片可能已经失效!

linux 图形化对话框 dialog

> 安装

  1. yum -y install dialog  

> 使用

  1. #消息框  
  2. dialog --title testing --msgbox "this is a test" 10 20  
  3. #yesno框  
  4. dialog --title "yes/no" --no-shadow --yesno "delete?" 10 30  
  5. #输入框  
  6. dialog --inputbox text 10 30  
  7. #密码框  
  8. dialog --insecure --passwordbox text 20 40   
  9. #文本框  
  10. dialog --title "get-pip.py" --textbox ./get-pip.py 17 40  
  11. # 菜单框  
  12. 格式:dialog --menu text height width  menu-height tag1 item1 tag2 item2 …  
  13. dialog --title "menu" --menu "choose one" 12 35 5 1 "say" 2 "walk" 3 "run"  
  14. # Fselect框(文件选框)  
  15. dialog --title "Pick one file" --fselect /root 7 40  
  16. # 复选框  
  17. 格式:dialog  --checklist "Test" height width  menu-height  tag1 item1 tag2 item2 …  
  18. dialog --backtitle "Checklist" --checklist "test" 20 50 10 Memory Memory_Size 1 Disk Disk_Size 2  
  19. # 日历  
  20. dialog --title "Calendar" --calendar "Date" 5 50  
  21. dialog --title "Calendar" --calendar "Date" 5 50 1 2 2013  
  22. # 进度框架  
  23. dialog --title "installation pro" --gauge "installation" 10 30 10  
  24. for i in {1..100} ;do echo $i;done | dialog --title "installation pro" --gauge "installation" 10 30  
  25.   
  26. #!/bin/bash    
  27. # vim gauge.sh  
  28. declare -i PERCENT=0  
  29. (  
  30.         for I in /etc/*;do  
  31.                 if [ $PERCENT -le 100 ];then  
  32.                         cp -r $I /tmp/test 2> /dev/null  
  33.                         echo "XXX"   
  34.                         echo "Copy the file $I ..."   
  35.                         echo "XXX"   
  36.                         echo $PERCENT    
  37.                 fi  
  38.         let PERCENT+=1  
  39.         sleep 0.1  
  40.         done  
  41. ) | dialog --title "coping" --gauge "starting to copy files..." 6 50 0  

> form

格式:dialog --form text height width formheight [ label y x item y x flen ilen ] ...
其中
flen 表示field length,定义了:选定字段中显示的长度
ilen 表示 input-length, 定义了:在外地输入的数据允许的长度
使用up/down(或ctrl/ N,ctrl/ P)在使用领域之间移动。使用tab键在窗口之间切换。
例子:

  1. # dialog --title "Add a user" --form "Please input the infomation of new user:" 12 40 4  \  
  2.   "Username:" 1  1 "" 1  15  15  0  \  
  3.   "Full name:" 2  1 "" 2  15  15  0  \  
  4.   "Home Dir:" 3  1 "" 3  15  15  0  \  
  5.   "Shell:"    4   1 "" 4  15  15  0  

> 实例一

  1. #!/bin/bash  
  2. yesno() {  
  3.  dialog --title "First screen" --backtitle "Test Program" --clear --yesno \  
  4.  "Start this test program or not ? \nThis decesion have to make by you. " 16 51  
  5.  # yes is 0, no is 1 , esc is 255  
  6.  result=$?  
  7.  if [ $result -eq 1 ] ; then  
  8.  exit 1;  
  9.  elif [ $result -eq 255 ]; then  
  10.  exit 255;  
  11.  fi  
  12.  username  
  13. }  
  14. username() {  
  15.  cat /dev/null >/tmp/test.username  
  16.  dialog --title "Second screen" --backtitle "Test Program" --clear --inputbox \  
  17.  "Please input your username (default: hello) " 16 51 "hello" 2>/tmp/test.username  
  18.  result=$?  
  19.  if [ $result -eq 1 ] ; then  
  20.  yesno  
  21.  elif [ $result -eq 255 ]; then  
  22.  exit 255;  
  23.  fi  
  24.  password  
  25. }  
  26. password() {  
  27.  cat /dev/null >/tmp/test.password  
  28.  dialog --insecure --title "Third screen" --backtitle "Test Program" --clear --passwordbox \  
  29.  "Please input your password (default: 123456) " 16 51 "123456" 2>/tmp/test.password  
  30.  result=$?  
  31.  if [ $result -eq 1 ] ; then  
  32.  username  
  33.  elif [ $result -eq 255 ]; then  
  34.  exit 255;  
  35.  fi  
  36.  occupation  
  37. }  
  38. occupation() {  
  39.  cat /dev/null >/tmp/test.occupation  
  40.  dialog --title "Forth screen" --backtitle "Test Program" --clear --menu \  
  41.  "Please choose your occupation: (default: IT)" 16 51 3 \  
  42.  IT "The worst occupation" \  
  43.  CEO "The best occupation" \  
  44.  Teacher "Not the best or worst" 2>/tmp/test.occupation  
  45.  result=$?  
  46.  if [ $result -eq 1 ] ; then  
  47.  password  
  48.  elif [ $result -eq 255 ]; then  
  49.  exit 255;  
  50.  fi  
  51.  finish  
  52. }  
  53. finish() {  
  54.  dialog --title "Fifth screen" --backtitle "Test Program" --clear --msgbox \  
  55.  "Congratulations! The test program has finished!\n Username: $(cat /tmp/test.username)\n Password: $(cat /tmp/test.password)\n Occupation: $(cat /tmp/test.occupation)" 16 51  
  56.  result=$?  
  57.  if [ $result -eq 1 ] ; then  
  58.  occupation  
  59.  elif [ $result -eq 255 ]; then  
  60.  exit 255;  
  61.  fi  
  62. }  
  63. yesno  

> 实例二

  1. #!/bin/bash  
  2.   
  3. # while-menu-dialog: a menu driven system information program  
  4.   
  5. DIALOG_CANCEL=1  
  6. DIALOG_ESC=255  
  7. HEIGHT=0  
  8. WIDTH=0  
  9.   
  10. display_result() {  
  11.   dialog --title "$1" \  
  12.     --no-collapse \  
  13.     --msgbox "$result" 0 0  
  14. }  
  15.   
  16. while true; do  
  17.   exec 3>&1  
  18.   selection=$(dialog \  
  19.     --backtitle "System Information" \  
  20.     --title "Menu" \  
  21.     --clear \  
  22.     --cancel-label "Exit" \  
  23.     --menu "Please select:" $HEIGHT $WIDTH 4 \  
  24.     "1" "Display System Information" \  
  25.     "2" "Display Disk Space" \  
  26.     "3" "Display Home Space Utilization" \  
  27.     2>&1 1>&3)  
  28.   exit_status=$?  
  29.   exec 3>&-  
  30.   case $exit_status in  
  31.     $DIALOG_CANCEL)  
  32.       clear  
  33.       echo "Program terminated."  
  34.       exit  
  35.       ;;  
  36.     $DIALOG_ESC)  
  37.       clear  
  38.       echo "Program aborted." >&2  
  39.       exit 1  
  40.       ;;  
  41.   esac  
  42.   case $selection in  
  43.     0 )  
  44.       clear  
  45.       echo "Program terminated."  
  46.       ;;  
  47.     1 )  
  48.       result=$(echo "Hostname: $HOSTNAME"; uptime)  
  49.       display_result "System Information"  
  50.       ;;  
  51.     2 )  
  52.       result=$(df -h)  
  53.       display_result "Disk Space"  
  54.       ;;  
  55.     3 )  
  56.       if [[ $(id -u) -eq 0 ]]; then  
  57.         result=$(du -sh /home/* 2> /dev/null)  
  58.         display_result "Home Space Utilization (All Users)"  
  59.       else  
  60.         result=$(du -sh $HOME 2> /dev/null)  
  61.         display_result "Home Space Utilization ($USER)"  
  62.       fi  
  63.       ;;  
  64.   esac  
  65. done  

参考 [Linux dialog详解][1] [LinuxCommand.org: Dialog][2]

[1]: http://www.ttlsa.com/linux-command/linux-dialog-shell/
[2]: http://linuxcommand.org/lc3_adv_dialog.php

» 转载请注明来源:若我若鱼 » linux 图形化 shell dialog

2 thoughts on “linux 图形化 shell dialog

  1. Unknown Unknown Unknown Unknown

    I must say you have high quality posts here.
    Your page should go viral. You need initial boost only.
    How to get it? Search for; Miftolo’s tools go viral

Leave a Reply

Your email address will not be published. Required fields are marked *

sixteen − nine =