如何在 Bash Shell 指令碼中顯示對話方塊
這個教程給出幾個如何使用類似zenity和whiptail的工具在Bash Shell 指令碼中提供訊息/對話方塊的例子。使用這些工具,你的指令碼能夠告知使用者當前程式執行的狀態並能與使用者進行互動。這兩個工具的不同之處在於顯示訊息框或者對話方塊的方式。Zenity用GTK工具包建立圖形使用者介面,而whiptail則在終端視窗內建立訊息框。
Zenity 工具
在Ubuntu中安裝zenity,執行:
sudo apt-get install zenity
用zenity建立訊息框或者對話方塊的命令是不言自明的,我們會給你提供一些例子來參考。
建立訊息框
zenity --info --title "Information Box" --text "This should be information" --width=300 --height=200
建立 Yes/No 詢問對話方塊
zenity --question --text "Do you want this?" --ok-label "Yeah" --cancel-label="Nope"
建立輸入框並將輸入值儲存到變數中
a=$(zenity --entry --title "Entry box" --text "Please enter the value" --width=300 --height=200) echo $a
輸入後,值會儲存在變數 $a 中。
這是一個獲取使用者姓名並顯示的實際事例。
#!/bin/bash # # This script will ask for couple of parameters # and then continue to work depending on entered values # # Giving the option to user zenity --question --text "Do you want to continue?" # Checking if user wants to proceed [ $? -eq 0 ] || exit 1 # Letting user input some values FIRSTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your first name." --width=300 --height=150) LASTNAME=$(zenity --entry --title "Entry box" --text "Please, enter your last name." --width=300 --height=150) AGE=$(zenity --entry --title "Entry box" --text "Please, enter your age." --width=300 --height=150) # Displaying entered values in information box zenity --info --title "Information" --text "You are ${FIRSTNAME} ${LASTNAME} and you are ${AGE}(s) old." --width=300 --height=100
這些是執行前面指令碼的截圖。
框1
輸入框
輸入框
輸入框
資訊框
別忘了檢視也許能幫助到你的有用的zenity 選項。
Whiptail 工具
在Ubuntu上安裝whiptail,執行
sudo apt-get install whiptail
用whiptail建立訊息框或者對話方塊的命令也是無需解釋的,我們會給你提供一些基本例子作為參考。
建立訊息框
whiptail --msgbox "This is a message" 10 40
建立 Yes/No 對話方塊
whiptail --yes-button "Yeah" --no-button "Nope" --title "Choose the answer" --yesno "Will you choose yes?" 10 30
建立有預設值的輸入框
whiptail --inputbox "Enter your number please." 10 30 "10"
嘗試使用輸入值要注意的一點是whiptail用stdout顯示對話方塊,用stderr輸出值。這樣的話,如果你用 var=$(…),你就根本不會看到對話方塊,也不能獲得輸入的值。解決方法是交換stdout和stderr。在whiptail命令後面新增 3>&1 1>&2 2>&3 就可以做到。你想獲取輸入值的任何whiptail命令也是如此。
建立選單對話方塊
whiptail --menu "This is a menu. Choose an option:" 20 50 10 1 "first" 2 "second" 3 "third"
這是一個請求使用者輸入一個資料夾的路徑並輸出它的大小的 shell 指令碼。
#!/bin/bash # # # Since whiptail has to use stdout to display dialog, entered value will # be stored in stderr. To switch them and get the value to stdout you must # use 3>&1 1>&2 2>&3 FOLDER_PATH=$(whiptail --title "Get the size of folder" / --inputbox "Enter folder path:" / 10 30 / "/home" / 3>&1 1>&2 2>&3) if [ -d $FOLDER_PATH ] then size=$(du -hs "$FOLDER_PATH" | awk '{print $1}') whiptail --title "Information" / --msgbox "Size of ${FOLDER_PATH} is ${size}" / 10 40 elif [ -f $FOLDER_PATH ] then whiptail --title "Warning!!!" / --msgbox "The path you entered is a path to a file not a folder!" / 10 40 else whiptail --title "Error!!!" --msgbox "Path you entered is not recognized. Please try again" / 10 40 fi
這是之前例子的一些截圖:
輸入框
訊息框
如果你在終端下工作,幫助手冊總是有用的。
結論
選擇合適的工具顯示對話方塊取決於你期望在桌面機器還是伺服器上執行你的指令碼。桌面機器使用者通常使用GUI視窗環境,也可能執行指令碼並與顯示的視窗進行互動。然而,如果你期望使用者是在伺服器上工作的,(在沒有圖形介面時,)你也許希望能確保總能顯示,那就使用whiptail或者任何其它在純終端視窗顯示對話方塊的工具。
相關文章
- 建立互動式shell指令碼對話方塊指令碼
- 顯示對話方塊,同時半透明顯示背景Activity
- 如何在mfc對話方塊中新增一個顯示網頁的視窗 .網頁
- 如何讓win32對話方塊居中顯示Win32
- 重新顯示 Windows 98 歡迎對話方塊(轉)Windows
- VC實現對話方塊上資訊的顯示 (轉)
- 一對一直播系統原始碼,按住對話方塊右滑顯示刪除原始碼
- c#中的模態對話方塊和非模態對話方塊C#
- React中的模式對話方塊React模式
- [Shell] Shell 生成 HTML指令碼,可顯示錶格HTML指令碼
- javascript中的彈出對話方塊JavaScript
- Bash Shell指令碼中的陣列使用例項指令碼陣列
- 對話方塊函式函式
- 登入對話方塊
- redis裡顯示key大小的shell指令碼Redis指令碼
- FineUIMvc隨筆(7)擴充套件通知對話方塊(顯示多個不重疊)UIMVC套件
- JavaScript練習題目(3)點選按鈕顯示確認對話方塊JavaScript
- shell和bash指令碼命令學習指令碼
- 在c++MFC下用PCL顯示操作點雲檔案 MFC對話方塊顯示操作PCL點雲C++
- [MFC]選擇目錄對話方塊和選擇檔案對話方塊
- SAP Spartacus B2B 頁面 Disable Confirmation 對話方塊的顯示原理
- flutter demo (四):對話方塊Flutter
- Javascript檔案對話方塊JavaScript
- css氣泡對話方塊程式碼例項CSS
- 對話方塊中對成批控制元件的操作 (轉)控制元件
- shell基礎教程二十一: shell指令碼中echo顯示內容帶顏色指令碼
- 如何在Element UI 對話方塊裡面載入高德地圖UI地圖
- bash shell指令碼執行方法總結指令碼
- BASH Shell的指令碼程式設計(轉)指令碼程式設計
- bash shell指令碼接受多個引數指令碼
- 如何在Shell指令碼中逐行讀取檔案指令碼
- Java 中彈出對話方塊的幾種方式Java
- 在 Flutter 使用 GetX 對話方塊Flutter
- Qt 對話方塊新增工具欄QT
- 如何自學qt(4)——對話方塊QT
- QT 等待對話方塊/進度QT
- android 多項對話方塊Android
- Android Dialog對話方塊Android