《Linux命令列與shell指令碼編程大全》圖形化案頭上的指令碼編程

來源:互聯網
上載者:User

《Linux命令列與shell指令碼編程大全》圖形化案頭上的指令碼編程 建立文本菜單建立菜單布局[plain] #!/bin/bash  clear #清屏  echo -e "\t\tMenu"  echo -e "1.\tDisplay disk space"  echo -e "2.\tDisplay logged on user"  echo -e "3.\tDisplay memory usage"  echo -e "0.\tExit menu\n\n"  echo -en "\t\tEnter option:" #-n表示不列印斷行符號  read -n1 option #讀取一個字元  echo ""  顯示效果:[plain]         Menu  1.  Display disk space  2.  Display logged on user  3.  Display memory usage  0.  Exit menu              Enter option:  建立菜單函數只需把上面的代碼用函數包起來即可添加菜單邏輯[plain] #!/bin/bash  option=""  create_menu(){      clear      echo -e "\t\tMenu"      echo -e "1.\tDisplay disk space"      echo -e "2.\tDisplay logged on user"      echo -e "3.\tDisplay memory usage"      echo -e "0.\tExit menu\n\n"      echo -en "\t\tEnter option:"      read -n1 option      echo ""  }    create_menu    case $option in  0)  echo "Display disk space";;  1)  echo "Display logged on user";;  2)  echo "Display memory usage";;  3)  echo "Exit menu";;  *)  echo "error";;  esac  添加對應的case即可,之後,我們再來實現相應的函數。整合shell指令碼菜單首先添加case相應的實現函數[plain] disk_space(){      clear      df -k  }    whoseon(){      clear      who  }    menu_usage(){      clear      cat /proc/meminfo  }  之後處理case部分[plain] deal_menu(){      case $option in      1)      disk_space;;      2)      whoseon;;      3)      menu_usage;;      0)      echo "Exit menu";;      *) #輸入錯誤,重新輸入      echo -e "\nSorry, wrong selection."      echo -en "\n\n\t\tHit any key to continue."      read -n1 option #重新讀取菜單選項      deal_menu;;      esac  }    deal_menu  使用select命令select命令允許從單個命令列建立菜單,然後再提取輸入的答案並自動處理。[plain] select variable in list  do      commands  done  list參數是構成菜單的空格分割的文本選項列表。select命令會在列表中將每個選項作為一個編好號的選項顯示,然後為選項顯示一個特殊的由PS3環境變數定義的提示符。(預設的提示符為#?)[plain] PS3="Enter option:"  select option in "Display disk space" "Display logged on user" "Display memory usage" "Exit menu"  do      case $option in      "Display disk space")      disk_space;;      "Display logged on user")      whoseon;;      "Display memory usage")      menu_usage;;      "Exit menu")      echo "Exit menu"      break;;      *)      echo -e "\nSorry, wrong selection."      echo -en "\n\n\t\tHit any key to continue."      read -n1 option      deal_menu;;      esac  done  運行結果:[plain] $ menu_test   1) Display disk space      3) Display memory usage  2) Display logged on user  4) Exit menu  Enter option:  select會自動產生菜單注意:儲存在變數中的結果是整個字串,不是菜單選項前面的數字 使用視窗安裝dialog:sudo apt-get install dialogdialog包dialog組件組件 描述calendar 提供選擇日期的日曆checklist 顯示多個選項(其中每一個選項都能開啟或關閉)from 構建一個表單(用標籤和文字欄位來填充)fselect 提供一個檔案選擇視窗來瀏覽選擇檔案gauge 顯示完成的百分比進度條infobox 顯示一條訊息,但不用等待回應inputbox 提供一個輸入文本用的文本表單inputmenu 提供一個可編輯的菜單menu 顯示可選擇的一些列選項msgbox 顯示一條訊息,並要求使用者選擇OK按鈕pause 顯示一個進度條來顯示特定暫訂時間的狀態passwordbox 顯示一個文字框來輸入文本,但會隱藏輸入的文本passwordform 顯示一個帶標籤和隱藏文本輸入的表單radiolist 提供一組菜單選項,但只能選擇其中一個tailbox 用tail命令在滾動視窗中顯示檔案的內容tailboxbg 跟tailbox一樣,但是在後台模式中運行textbox 在滾動視窗中顯示檔案的內容timebox 提供一個選擇小時、分鐘和秒數的視窗yesno 提供一條簡單的帶Yes和No按鈕的訊息dialog --widget parameterswidget是上面的組件,parameters是組件視窗大小、所需文本等每個dialog組件都提供兩種格式的輸出:使用STDERR使用退出狀態代碼使用者選擇的按鈕決定了dialog命令的退出狀態代碼。如果選擇Yes、OK,dialog命令會返回退出狀態代碼0。如果選擇了Cancel、NO,dialog命令會返回退出狀態代碼1可以用標準的$?變數來查看退出狀態代碼如果組件返回了任何資料,那麼dialog命令會將資料發送到STDERRmsgbox組件dialog --msgbox text height width可以指定titledialog --title Testing --msgbox "This is a test" 10 20yesno組件dialog --title "Do not lie to me" --yesno "Are you a girl?" 10 20inputbox組件dialog --title "Do not lie to me" --inputbox "Enter you age:" 10 20 2>age.txttextbox組件dialog --textbox /etc/passwd 15 45可以顯示大量文本,並且可以用方向鍵、Home、End、PgUp、PgDn等操作menu組件dialog --menu "Menu" 20 30 5 1 "A." 2 "B." 3 "C."上面紅色的參數表示功能表列的高度為5個item高,前面兩個參數是dialog的高和寬fselect組件dialog --title "select a file" --fselect /etc/ 10 50 2>file.txt  dialog選項選項 描述--add-widget 繼續下個對話方塊,直到按下Esc或者Cancel--aspect ratio 指定視窗寬度和高度的寬高比--backtitle title 指定顯示在螢幕頂部背景上的標題(2)--begin x y 指定視窗左上方的起始位置--cancel-label label 指定Cancel按鈕的替代標籤--clear 用預設對話背景色來清空顯示--colors 在對話方塊文本中嵌入ANSI色彩編碼--cr-wrap 在對話文本中允許使用分行符號並強制換行--create-rc file 將樣本設定檔的內容複寫到指定的file檔案中(1)--defaultno 將yes/no對話的預設答案設定為no--default-item string 設定複選列表,表單或菜單對話中的預設項--exit-label label 指定Exit按鈕的替代標籤--extra-button 在OK按鈕和Cancel按鈕中顯示一個額外按鈕--extra-label label 指定額外按鈕的替代標籤--help 顯示dialog命令的協助資訊--help-button 在OK按鈕和Cancel按鈕後顯示一個Help按鈕--help-label label 指定Help按鈕的替代標籤--help-status 當選定Help按鈕時,會在協助資訊後寫入多選列表、單選列表或表單資訊--ignore 忽略dialog不能識別的選項--input-fd fd 指定另一個檔案描述符,而不是STDIN--insecure 在password組件中鍵入時顯示星號--item-help 為多選列表,單選列表或菜單中的每個標號在螢幕的底部添加一個協助欄--keep-window 不要清除螢幕上顯示過的組件--max-input size 指定輸入的最大字元長度。預設為2048--nocancel 隱藏Cancel按鈕--no-collapse 在對話文本中不要將定位字元轉換成空格--no-kill 將tailboxbg對話放到後台,並禁止該進程的SIGHUP訊號--no-label label 為No按鈕指定替代標籤--no-shadow 不要顯示交談視窗的投影效果--ok-label label 指定OK按鈕的替代標籤--output-fd fd 指定另一個輸出檔案描述符,而不是STDERR--print-maxsize 將交談視窗的最大尺寸列印到輸出中--print-size 將每個交談視窗的大小列印到輸出中--print-version 將dialog的版本列印到輸出中--separate-output 一次一行地輸出checklist組件的結果而不用引號--separator string 為每個組件指定分割輸出的字串--separate-widget string 為每個組件指定分割輸出的字串--shadow 在每個視窗的右下角繪製陰影--single-quoted 需要時對多選列表的輸出採用單引號--sleep sec 在處理完交談視窗之後延遲指定的秒數--stderr 將輸出發送到STDERR(預設即是如此)--stdout 將輸出發送到STDOUT--tab-correct 將定位字元轉換成空格--tab-len n 指定一個定位字元佔用的空格數(預設為8)--timeout sec 指定無使用者輸入的話,sec秒後退出並返回錯誤碼--title title 指定交談視窗的標題--trim 從對話文本中刪除前面是空格和分行符號--visit-items 修改交談視窗中的定位字元的停留位置,使其包括選項列表--yes-label label 為Yes按鈕執行替代標籤(1)dialog命令支援運行時配置。dialog啟動時先去檢查是否設定了DIALOGRC環境變數,該變數儲存設定檔路徑。如果沒有找到,則使用$HOME/.dialogrc。如果這個也不存在,就嘗尋找編譯時間指定的GLOBALRC(/etc/dialogrc),如果這個也不存在,就用編譯預設值。(2)--backtitle選項是為了指令碼中的菜單建立公用標題的簡便辦法。如果給每個交談視窗都指定了該選項,那麼它在應用中將保持一致。在指令碼中使用dialog命令這裡需要注意兩點:1.如果有Cancel或者No按鈕,檢查dialog命令的退出狀態代碼2.重新導向STDERR來獲得輸出值下面是將之前的代碼改用dialog實現[plain] #!/bin/bash  temp=`mktemp -t temp.XXXXXX`  temp2=`mktemp -t temp2.XXXXXX`  disk_space(){      df -k > $temp      dialog --textbox $temp 20 60  }    whoseon(){      who > $temp      dialog --textbox $temp 20 50  }    menu_usage(){      cat /proc/meminfo > $temp      dialog --textbox $temp 20 50  }    dialog --menu "menu" 20 30 10 1 "Display disk space" 2 "Display logged on user" 3 "Display memory usage" 0 "Exit menu" 2>$temp2  if [ $? -ne 1 ]  then      selection=`cat $temp2`      case $selection in          1)              disk_space;;          2)              whoseon;;          3)              menu_usage;;          0)    ;;          *)          dialog --msgbox "Sorry, invalid selection" 10 30      esac  fi    rm -f $temp $temp2 2>/dev/null   使用圖形KDE環境安裝kdialogsudo apt-get install kdebase-binkdialog組件和dialog類似,命令格式為:kdialog display-options window-options argumentswindow-options選項允許指定使用那種類型的視窗。kdialog視窗選項選項 描述--checklist title [tag item status] 多選列表菜單,狀態會說明該選項是否被選定--error text 錯誤訊息框--inputbox text [init] 輸入文字框。可以用init指定預設值--menu title [tag item] 帶有標題的菜單選擇框,以及用tag標識的選項列表--msgbox text 顯示指定檔案的簡單訊息框--password text 隱藏使用者輸入的密碼輸入文字框--radiolist title [tag item status] 單選列表菜單,狀態會說明該選項是否被選定--separate-output 為多選列表和單選列表菜單返回按行分開的選項--sorry text “抱歉”訊息框--textbox file [width] [height] 顯示file的內容的文字框,另外指定了width和height--title title 為交談視窗的TitleBar地區指定一個標題--warningyesno text 帶有Yes和No按鈕的警告訊息框--warningcontinuecancel text 帶有Continue和Cancel按鈕的警告訊息框--warningyesnocancel text 帶有Yes、No和Cancel按鈕的警告訊息框--yesno text 帶有Yes和No按鈕的提問框--yesnocancel text 帶有Yes、No和Cancel按鈕的提問框checklist和radiolist允許你在列表中定義單獨的選項以及他們預設是否選定使用kdialogkdialog與dialog最大的不同就是kdialog將輸出重新導向到了STDOUT中。GNOME環境zenity組件zenity視窗組件選項 描述--calendar 顯示整月日曆--entry 顯示文本輸入交談視窗--error 顯示錯誤訊息交談視窗--file-selection 顯示完整的路徑名和檔案名稱交談視窗--info 顯示資訊交談視窗--list 顯示多選列表或單選列表交談視窗--notification 顯示通知表徵圖--process 顯示進度條交談視窗--question 顯示yes/no交談視窗--scale 顯示可調整大小的視窗--text-info 顯示含有文本的文字框--warning 顯示警告交談視窗zenity提供的視窗就比之前的dialog效果好多了zenity --calendar當選擇了日期之後,zenity會將值返回到STDOUT中,和kdialog一樣  在指令碼中使用zenity[plain] #!/bin/bash  temp=`mktemp -t temp.XXXXXX`  temp2=`mktemp -t temp2.XXXXXX`  disk_space(){      df -k > $temp      zenity --text-info --title "Disk space" --filename=$temp --width 750 --height 300  }    whoseon(){      who > $temp      zenity --text-info --title "Logged on user" --filename=$temp --width 500 --height 200  }    menu_usage(){      cat /proc/meminfo > $temp      zenity --text-info --title "Memory usage" --filename=$temp --width 300 --height 500  }    zenity --list --radiolist --title "Menu" --column "Select" \  --column "Menu Item" FALSE "Display disk space" FALSE "Display logged on user" FALSE "Display memory usage" FALSE "Exit" > $temp2  if [ $? -ne 1 ]  then      selection=`cat $temp2`      case $selection in          "Display disk space")              disk_space;;          "Display logged on user")              whoseon;;          "Display memory usage")              menu_usage;;          "Exit")    ;;          *)          zenity --info "Sorry. invalid selection."      esac  fi    rm -f $temp $temp2 2>/dev/null  zenity不支援菜單對話方塊 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.