[TOC]
` `Zenity是一個開源和跨平臺的應用程序,它在命令行中顯示GTK +對話框并使用shell腳本。
` `**GNU Linux**的操作系統建立在非常強大的**內核**稱為Linux。Linux以其命令行操作而聞名。隨著Linux在日常和桌面計算中的發明,nix保持不再偏向命令行,它同樣是圖形化和開發圖形應用程序保持不再是一個困難的任務。

## Zenity是什么
` `**enity**是一個開源和顯示**GTK +對話框**的命令行和使用shell腳本一個跨平臺的應用程序。它允許在圖形框中向/從shell請求和呈現信息。該應用程序允許您在命令行中創建圖形對話框,并使用戶和shell之間的交互非常容易。
` `還有其他的替代品,但沒有比zenity簡單的,特別是當你不需要復雜的編程。Zenity,一個工具,你必須有你的手。
## Zenity特性
1. FOSS軟件
2. 跨平臺應用程序
3. 允許GTK +對話框執行
4. 命令行工具
5. 在Shell腳本中的支持
## 用處
1. 輕松創建GUI
2. 比其他復雜工具更少的功能
3. 使shell腳本能夠與GUI用戶交互
4. 對于圖形用戶交互,可以進行簡單的對話創建
## 在Linux中安裝Zenity
` `**Zentity**默認安裝或者在今天大多數的標準Linux發行庫可用。您可以通過執行以下命令檢查是否安裝到您的機器上。
~~~
yhp@yhp-PC:~$ zenity --version
3.22.0
~~~
~~~
yhp@yhp-PC:~$ whereis zenity
zenity: /usr/bin/zenity /usr/share/zenity /usr/share/man/man1/zenity.1.gz
~~~
` `如果它沒有安裝,您可以使用如下**apt**或**Yum**命令進行安裝。
~~~
ravisaive@howtoing:~$ sudo apt-get install zenity [on Debian based systems]
root@howtoing:~# yum install zenity [on RedHat based systems]
~~~
` `此外,您還可以從源文件建立它,使用下面的鏈接下載最新**的zenity**源代碼包。
[http://ftp.gnome.org/pub/gnome/sources/zenity/](http://ftp.gnome.org/pub/gnome/sources/zenity/)
## Zenity基本對話框
` `一些**的zenity**的基本對話框,它可以直接在命令行調用的。
### 1.快速日歷對話框怎么樣?
~~~
yhp@yhp-PC:~$ zenity --calendar
~~~

### 2.錯誤對話框
~~~
yhp@yhp-PC:~$ zenity --error
~~~

### 3.一般文本輸入對話框
~~~
yhp@yhp-PC:~$ zenity --entry
~~~

### 4.信息對話框
~~~
yhp@yhp-PC:~$ zenity --info
~~~

### 5.問題對話框
~~~
yhp@yhp-PC:~$ zenity --question
~~~

### 6.進度欄
~~~
yhp@yhp-PC:~$ zenity --progress
~~~

### 7.縮放對話框
~~~
yhp@yhp-PC:~$ zenity --scale
~~~

### 8.密碼對話框
~~~
yhp@yhp-PC:~$ zenity --password
~~~

### 9.窗體對話框
~~~
yhp@yhp-PC:~$ zenity --forms
~~~

### 10.關于對話
~~~
yhp@yhp-PC:~$ zenity --about
~~~

## 創建Shell腳本對話框
` `現在,我們將使用要討論**的zenity對話框**創建簡單的shell腳本在這里。雖然我們可以通過執行創建一個對話框**的zenity**直接從shell命令(象我們上面那樣),但是我們不能為了獲得一些有意義的結果鏈接兩個對話框。
` `如果一個交互式對話框從你的輸入,并顯示結果。
~~~
#!/bin/bash
first=$(zenity --title="Your's First Name" --text "What is your first name?" --entry)
zenity --info --title="Welcome" --text="Mr./Ms. $first"
last=$(zenity --title="Your's Last Name" --text "$first what is your last name?" --entry)
zenity --info --title="Nice Meeting You" --text="Mr./Ms. $first $last"
~~~

## 關于腳本描述
~~~
#!/bin/bash
~~~
` `在下面的行中,“first”是一個變量,變量的值在運行時是Generated。
1. 'entry'指的zenity被要求生成一個文本輸入框。
2. '--title'定義生成的文本框的標題。
3. '--text='定義了可在文本輸入框中的文本。
~~~
first=$(zenity --title="Your's First Name" --text "What is your first name?" --entry)
~~~
` `以下腳本文件的這一行用于生成信息(-info)對話框,標題為“歡迎”和文本“Mr./Ms.first”.
~~~
zenity --info --title="Welcome" --text="Mr./Ms. $first"
~~~
` `腳本的這一行類似于腳本的行號二,除了這里定義了一個新變量“last”。
~~~
last=$(zenity --title="Your's Last Name" --text "$first what is your last name?" --entry)
~~~
` `腳本的最后一行再次類似于腳本的第三行,它生成信息對話框,其中包含變量'$ first'和'$ last'。
~~~
zenity --info --title="Nice Meeting You" --text="Mr./Ms. $first $last"
~~~
` `有關如何創建一個使用shell腳本自定義對話框的更多信息,請訪問下面的參考頁**的zenity。** [https://help.gnome.org/users/zenity/stable/](https://help.gnome.org/users/zenity/stable/)
## Zenity 中文手冊
要看zenity參數用法,打zenity --help或man zenity
Usage: zenity [OPTION...]
### 對話框選項
* --calendar 顯示日歷對話框
* --entry 顯示文字輸入欄對話框
* --error 顯示錯誤信息對話框
* --file-selection 顯示文件選擇對話框
* --info 顯示信息對話框
* --list 顯示清單對話框
* --progress 顯示進度指示窗
* --question 顯示提問信息對話框
* --text-info 顯示文字資信對話框
* --warning 顯示警告信息對話框
### 一般選項
* --title=標題 指定對話框的標題
* --window-icon=圖示路徑 指定視窗使用的圖示
* --width=寬度 指定寬度
* --height=高度 指定高度
*
### 日歷選項
* --text=STRING 指定對話框中的文字
* --day=INT 指定日歷中的日期
* --month=INT 指定日歷中的月份
* --year=INT 指定日歷中的年份
* --date-format=STRING 指定回傳的日期格式
### 文字輸入欄選項
* --text=STRING 指定對話框中的文字
* --entry-text=STRING 指定輸入欄中的文字
* --hide-text 隱藏輸入欄中的文字
### 錯誤信息選項
* --text=STRING 指定對話框中的文字
### 有關文件選擇的選項
* --filename=文件名稱 指定文件名稱
* --multiple 允許同時選擇多個文件
* --separator=分隔字符 指定分隔輸出結果的字符。
### 信息選項
* --text=STRING 指定對話框中的文字
### 清單選項
* --column=STRING 指定欄位標題
* --checklist 第一欄使用獨立選擇按鈕
* --radiolist 第一欄使用多項選擇按鈕
* --separator=分隔字符 指定分隔輸出結果的字符
* --editable 可以更改文字
### 進度選項
* --text=STRING 指定對話框中的文字
* --percentage=INT 指定開始時的百份比數值
* --pulsate 填滿進度列
* --auto-close 當進度達到100% 時關閉對話框
### 提問選項
* --text=STRING 指定對話框中的文字
### 文字選項
* --filename=文件名稱開啟文件
* --editable 可以更改文字
### 警告信息選項
* --text=STRING 指定對話框中的文字
### GTK+ 選項
* --gdk-debug=標簽 準備設定的gdk 調試標簽
* --gdk-no-debug=標簽 準備去除的gdk 調試標簽
* --display=畫面 準備使用的 X 畫面
* --sync 進行 X 同步呼叫
* --name=名稱 視窗總管所需的程式名稱
* --class=類別 視窗總管所需的程式類別名稱
* --gxid-host=主機
* --gxid-port=端口號
* --gtk-debug=標簽 準備設定的gtk+ 調試標簽
* --gtk-no-debug=標簽 準備去除的gtk+ 調試驗標簽
* --g-fatal-warnings 將所有警告信息作為嚴重錯誤處理
* --gtk-module=模塊 載入額外的 Gtk 模塊
### 其它選項
* --about 關于 zenity
* --version 顯示版本
### 求助選項
* -?, --help Show this help message
* --usage Display brief usage message
## zenity圖形界面之信息對話框和單復選對話框
```
#!/bin/bash
CD="cd"
LS="ls"
RM="rm"
CP="cp"
FIND="find"
GREP="grep"
OTHERS="others"
## 自定義函數1,不傳遞參數
cdFunction()
{
##2,信息對話框
zenity --info --width 300 --height 200 --text="用法:cd (參數),進入到某個目錄中,cd ..是返回到上一級目錄,cd ../..是返回到上上一級目錄,cd(回車) 進入用戶主目錄,cd ~進入用戶主目錄,cd -返回進入此目錄之前所在的目錄,cd !$把上個命令的參數作為cd參數使用。"
}
lsFunction()
{
zenity --info --width 300 --height 200 --text="用法:ls (選項) (參數),選項-l,所有輸出信息用單列格式輸出,不輸出為多列,選項-t,用文件和目錄的更改時間排序,參數一般為文件或者目錄。"
}
rmFunction()
{
zenity --info --width 300 --height 200 --text="用法:rm (選項) (參數),選項-f,即使原檔案屬性設為唯讀,也可以刪除,無需逐一詢問,選項-r,將目錄及以下之檔案逐一刪除。"
}
cpFunction()
{
zenity --info --width 300 --height 200 --text="用法:cp (選項) (參數),選項-a,這個選項通常在復制目錄時使用,它保留鏈接、文件屬性,并復制目錄下的所有內容,選項-r,若給出的源文件是一個目錄文件,此時將復制該目錄下所有的子目錄和文件。"
}
## 自定義函數2,傳遞參數
checkFunction()
{
declare i
if [ $1 == 1 ]
then
echo $2
else
tmp=$2
for((i=0;i<$1;i++))
do
str=${tmp%%|*}
tmp=${tmp#*|}
echo $str
done
fi
}
########## function 1
while((1))
do
##1,列表單選框
select_command=$(zenity --list --radiolist --width 300 --height 400 --text="linux 常見命令" --column="選擇" --column="內容列表" TRUE $CD FALSE $LS FALSE $RM FALSE $CP);
## 處理自定義函數的結果
if [ "$select_command" == "$CD" ]
then
cdFunction
elif [ "$select_command" == "$LS" ]
then
lsFunction
elif [ "$select_command" == "$RM" ]
then
rmFunction
elif [ "$select_command" = "$CP" ]
then
cpFunction
else
break
fi
done
########## function 2
while((1))
do
##2,列表復選框
select_option=$(zenity --list --checklist --width 300 --height 400 --text="查找命令" --column="選擇" --column="內容列表" FALSE $FIND FALSE $GREP FALSE $LS FALSE $OTHERS);
if [ "$select_option" == "$FIND|$GREP|$LS|$OTHERS" ]
then
checkFunction 4 $select_option
elif [ "$select_option" == "$FIND|$GREP|$LS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$FIND|$GREP|$OTHERS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$FIND|$LS|$OTHERS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$GREP|$LS|$OTHERS" ]
then
checkFunction 3 $select_option
elif [ "$select_option" == "$FIND|$GREP" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$FIND|$LS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$FIND|$OTHERS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$GREP|$LS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$GREP|$OTHERS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$LS|$OTHERS" ]
then
checkFunction 2 $select_option
elif [ "$select_option" == "$FIND" ]
then
checkFunction 1 $select_option
elif [ "$select_option" == "$GREP" ]
then
checkFunction 1 $select_option
elif [ "$select_option" == "$LS" ]
then
checkFunction 1 $select_option
elif [ "$select_option" == "$OTHERS" ]
then
checkFunction 1 $select_option
else
break
fi
done
exit 0
```

- 0 工具
- 0.1 圖片無損放大
- 1 deepin系統
- 1.1 deepin系統安裝
- 1.2 deepin創建desktop文件
- 1.3 瀏覽器運行虛擬機
- 1.4 linux的百度網盤突然打不
- 1.5 deepin安裝后個人配置
- 1.5.1 安裝公式編輯器AxMath
- 1.5.2 Deepin標題欄太高的解決辦法(自定義高度)
- 1.5.3 linux下配置VS Code的標題欄風格
- 1.5.4 安裝腳本解釋器fish
- 1.6 關于軟件安裝
- 1.6.1 rpm和deb包想換轉換的方法
- 1.7 deepin開機自啟的設置方法
- 2 tiny core系統
- 2.1 安裝系統到硬盤
- 2.2 系統軟件安裝介紹
- 2.3 安裝控制臺計算器bc
- 2.4 關機保存的方法
- 2.5 linux文件結構說明
- 2.6 為tinycore配置ssh
- 3 使用Linux中的一些技巧
- 3.1 軟連接的使用
- 3.2 LInux下解壓
- 3.3 刪除操作
- 3.4 Zenity-在命令行和Shell腳本中創建圖形(GTK +)對話框
- 3.4.1 列表框
- 3.4.2 口令對話框
- 3.4.3 消息對話框
- 3.4.3.1 信息對話框
- 3.4.3.2 錯誤框
- 3.4.3.3 問題對話框
- 3.4.3.4 警告對話框
- 3.4.4 范圍對話框(滑條)
- 3.4.5 文件選擇對話框
- 3.4.6 表單對話框
- 3.4.7 文本信息框
- 3.4.8 進度框
- 3.4.9 文本輸入框
- 3.4.10 通知區域圖標
- 3.4.11 日歷對話框
- 3.4.12 顏色對話框
- 3.4.13 上述對話框測試文件
- 3.4.14 使用C++調用zenity
- 3.5 Linux whereis、find和locate命令
- 3.6 字體下載
- 3.7 使用Electron 創建跨平臺的應用程序
- 3.8 shell的使用
- 3.8.1 $$,$?等表示什么
- 3.8.2 shell隨機產生某一個范圍內的整數
- 3.8.3 寫shel腳本的一些使用操作
- 3.8.4 linux shell操作二進制文件
- 3.8.5 shell中的一些實用技巧
- 3.8.5.1 列出當前路徑下的所有文件夾
- 3.8.5.2 列出當前路徑下所有文件
- 3.8.5.3 獲取當前虛擬終端的大小
- 3.8.5.4 判斷輸入字符串是否為數字
- 3.8.5.5 bash中的數學運算
- 3.8.5.6 按照文件創建時間順序列出文件
- 3.8.5.7 echo輸出含空格不換行的設置方法
- 3.8.5.8 find 遞歸/不遞歸 查找子目錄的方法
- 3.8.5.9 echo顯示顏色設置
- 3.8.5.10 bash中使用${}字符操作方法
- 3.8.5.11 ls查找目錄,文件,軟連接等的方法
- 3.8.5.12 檢測某個程序是否在運行
- 3.8.5.13 bash/shell 解析命令行參數工具:getopts/getopt
- 3.8.5.14 獲取腳本的絕對路徑
- 3.8.6 使用bash寫的腳本管理腳本
- 3.9 Linux創建自定義命令
- 3.10 deepin掛載遠程文件夾到本地
- 3.11 linux root用戶添加用戶
- 3.12 實用腳本或者命令
- 3.12.1 命令行 將ppt轉換為 pdf
- 3.12.2 deepin上實現自定義命令
- 4 slitaz系統
- 4.1 系統安裝
- 4.2 安裝軟件命令tazpkg
- 4.3 使用說明
- 4.4 用 tazlito 構建 livecd自制linux系統
- 4.5 英文顯示支持設置方法
- 4.6 配置ssh
- 5 busybox的編譯使用
- 5.1 busybox介紹
- 5.2 busybox編譯使用
- 6 配置自己的linux
- 6.1 在deepin上編譯linux內核
- 7 每天一個linux命令
- 7.1 文件管理類
- 7.1.1 cat--接文件并打印到標準輸出設備上
- 7.1.2 chattr--改變文件屬性
- 7.1.3 chgrp--變更文件或目錄的所屬群組
- 7.1.4 chmod --控制文件如何被他人所調
- 7.1.5 chown命令--指定文件的擁有者改為指定的用戶或組
- 7.1.6 grep命令--用于查找文件里符合條件的字符串
- 7.1.7 其他
- 7.2 文檔編輯類
- 7.2.1 col--過濾控制字符
- 7.2.2 colrm--濾掉指定的行
- 7.2.3 comm --比較兩個已排過序的文件
- 7.2.4 awk--一種處理文本文件的語言,是一個強大的文本分析工具
- 7.2.5 sed命令
- 7.3 文件傳輸類
- 7.3.1 prm--將一個工作由打印機貯列中移除
- 7.4 磁盤管理類
- 7.4.1 cd--切換當前工作目錄至 dirName(目錄參數)。
- 7.4.2 df--顯示目前在Linux系統上的文件系統的磁盤使用情況統計
- 7.4.3 dirs--顯示目錄記錄
- 7.4.5 du--顯示目錄或文件的大小
- 8 其他系統
- 8.1 Alpine Liunx
- 8.1.2 簡介
- 8.1.2 本地安裝
- 8.1.3 apk軟件包管理
- 8.1.4 配置ssh