9.bash shell程式設計

tonykorn97發表於2006-08-25

9.11 建立shell指令碼的步驟

Shell指令碼通常在編輯器中編寫,由命令和註釋組成。註釋通常以#開頭,用於說明程式將要做什麼事情。

第一行。在指令碼左上角的第一行用來說明程式執行指令碼的那一行。這行通常稱為shbang行。寫作:

#!/bin/bash

#!被稱為魔術數字(magic number),用於供核心確認哪個程式將翻譯並執行這個指令碼。該行必須在你的指令碼的第一行。

使指令碼可執行。當你建立一個檔案後,它並沒有執行的許可權。你需要許可權去執行它,透過chmod可以將其許可權改變為可執行

Chmod +x myscript


9.2 讀取使用者輸入

9.2.2 read 命令

read 命令是用於從終端或者檔案中讀取輸入的內鍵命令。

Read命令讀取整行輸入,每行末尾的換行符倍翻譯為Null(空字串).如果沒有知道名稱,讀取的行就被賦值給一個特定的變數reply。你也可以使用read命令。如果沒有指定名次,讀取的行就被賦值給一個特定的變數reply。你也可以使用read命令,使得程式停下來等待使用者輸入回車。

Read命令

格式

含義

Read answer

從標準輸入讀取輸入並賦值給變數answer

Read first last

從標準輸入讀取輸入到第一個空格或者回車,將輸入的第一個單詞放入變數first中,並將該行其他的輸入放在變數last

Read

從標準輸入讀取一行賦值給變數reply

Read –a arrayname

把單詞清單讀入一個叫作arrayname的數字裡

Read –e

在命令列狀態下開啟命令列編輯。如果編輯器是vi,那麼在提示符下就可以直接使用vi命令了

Read –p prompt

列印提示,等待輸入,並將輸入儲存在reply

Read –r line

允許輸入包含反斜槓

9.3 數學計算

9.3.1 整數(declare命令和let命令)

Declare命令。用declare –i 命令可以將變數宣告為整數。如果將字串賦值給整數變數。Bash將把0賦值給該變數。

整數變數清單。Declare –i 命令後面不加任何引數,將顯示所有的整數變數和他們的值。

Let命令。Let命令是bash的內建命令,用來做數學計算和數字表示法檢測。

9.4 位置參量與命令列引數

9.4.1 位置參量

資訊可以透過命令列傳遞給指令碼。在指令碼名稱後面以空格分隔的單詞稱為引數。

命令列引數在指令碼中可以按照其位置提供參考作用。變數$#用來判斷引數的個數,而$*用來顯示所以的引數。

位置參量

位置參量 含義

$0 引用指令碼名稱

$3 獲取位置參量的個數

$* 列位置參量清單

$@ 同上

“$*” 擴充套件為一個引數

“$@” 擴充套件為彼此分隔的引數

$1….${10} 引用單個位置參量

9.4.2 set命令和位置參量

set命令可以用來重置位置參量。一旦重置,舊的參考變數清單舊丟失了。恢復位置參量用命令set -- , $0永遠是指令碼名。

9.5 條件結構和流控制

退出狀態

Bash 允許兩種型別的條件控制:命令的成功或者失敗,表示式的真或者假。在兩種情況下都需要使用退出狀態。退出狀態值為0表示成功或者為真,否則為失敗或者為假。?狀態變數報錯了一個退出狀態值相互對應的數值。

內鍵test命令

通常用內鍵的test命令給表示式賦值,這個命令也用來連線括號。可以使用test命令,或用一系列的括號代替test命令。只有test命令或者使用方括號時,表示式不能賦值。因為空格在字串中用來分隔單詞,所以包含空格的單詞需要使用使用引號。

bash 2.x版本中,[[]]可以用來給表示式賦值(內鍵混合的test命令)。包含空格的字串在整體使用時必須被引號引用。在簡單test命令中,邏輯符號&&(邏輯和)||(邏輯或)可以替代-a 或者 –o選項。

Test命令運算子

判斷運算子

判斷是否為真

字串判斷

[string1=string2]

String1等於string2

[string1==string2]

String1 等於 string2

[string1!=string2]

String1 不等於 string2

[string]

String 不空

[-z string]

String 長度時0

[-n string]

String 長度非 0

[-l string]

String 長度

邏輯判斷

[string 1 –a string 1]

String1 string2都是真

[string1 –o string2]

String1 string2 是真

[!string1]

String1不匹配

邏輯判斷(符合判斷)

[[pattern1&&pattern2]]

String1 string2都是真

[[pattern1 || pattern2

String1 string2 是真

[[!pattern]]

String1不匹配

整數判斷

[int1 –eq int2]

等於

[int1 –ne int2]

不等於

[int1 –gt int2]

大於

[int1 –ge int2]

列印等於

[int1 –lt int2]

小於

[int1 –le int2]

小於等於

檔案判斷中的二進位制操作

[file1 –nt file2]

File1 file2

[file1 –ot file2]

File1 file2

[file1 –ef file2]

File1 file2有相同的裝置或者i結點數

Let命令運算子

9.5.3 if命令

9.5.4 if/elif/else命令

9.5.5 檔案檢驗

9.5.6 null命令

Null命令用冒號表示,是一個內鍵的什麼都不做的命令,返回狀態值為0。如果在if命令後面沒有內容,同時有要避免產生錯誤資訊,舊需要在then後面寫null語句。通常null命令作為loop命令的引數來建立一個無限迴圈。

9.5.7 case命令

Case命令是一個多路分支判斷語句,可以用來替換if/elif結果。Case命令會嘗試用變數匹配value1,value2….直到匹配找到,一旦一個值匹配了case變數,就執行這個值後面的語句直到兩個分號為止。然後就從esac(就是case的反向拼寫)後面開始執行。

如果case變數沒有被匹配,程式就執行*)後面的語句,直到遇到;或者esac為至。*)d 作用跟在if/elif中的else的作用是一樣的.case值中允許出現shell萬用字元和豎線(管道)作為or運算子。

Case variable in

Value1

Command(s)

;;

Value2

Command(s)

;;

*)

Command(s)

;;

esac

9.6 迴圈命令

For 命令

While命令

Until命令

Select命令和選單

Here文件是建立選單的簡單方法,但是bash介紹了另外一種迴圈機制,叫作select迴圈,主要的作用就是建立選單。一個數字化的選單顯示在標準錯誤上,PS3用來提示使用者輸入。預設的PS3#?.PS3提示顯示以後,shell就等待使用者輸入。輸入的是該選單中的數字,若輸入被報存在指定變數REPLY中,則變數REPLY中的數字與括號右邊選項清單中字串有著對應的關係。

Looping命令

Shift命令。Shift命令用來把參量列表位移知道次數。沒有引數的shift把引數變數表向左位移一位。一旦位移發生,被位移出列表的引數就被永遠刪除了。通常在while迴圈中,shift用來讀取列表中的參量。

Break命令。內鍵break命令用來從迴圈中強行退出,但是不退出程式。

Continue命令。如果某些條件為真,continue命令就控制跳轉到迴圈的頂部。

9.7 函式

9.8 陷阱訊號

9.9 除錯

9.10 getopts處理命令列選項

9.11 Eval命令與命令列解析

9.12 Bash選項

9.13 Shell內鍵命令

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245453/,如需轉載,請註明出處,否則將追究法律責任。

相關文章