歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

《Linux命令行與shell腳本編程大全》圖形化桌面上的腳本編程

《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 dialog dialog包 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 parameters widget是上面的部件,parameters是部件窗口大小、所需文本等 每個dialog部件都提供兩種格式的輸出: 使用STDERR 使用退出狀態碼 用戶選擇的按鈕決定了dialog命令的退出狀態碼。如果選擇Yes、OK,dialog命令會返回退出狀態碼0。如果選擇了Cancel、NO,dialog命令會返回退出狀態碼1 可以用標准的$?變量來查看退出狀態碼 如果部件返回了任何數據,那麼dialog命令會將數據發送到STDERR msgbox部件 dialog --msgbox text height width 可以指定title dialog --title Testing --msgbox "This is a test" 10 20 yesno部件 dialog --title "Do not lie to me" --yesno "Are you a girl?" 10 20 inputbox部件 dialog --title "Do not lie to me" --inputbox "Enter you age:" 10 20 2>age.txt textbox部件 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環境 安裝kdialog sudo apt-get install kdebase-bin kdialog部件 和dialog類似,命令格式為: kdialog display-options window-options arguments window-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允許你在列表中定義單獨的選項以及他們默認是否選定 使用kdialog kdialog與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不支持菜單對話框  
Copyright © Linux教程網 All Rights Reserved