Shell 指令碼編寫
Shell
至作業系統的介面稱為 shell。shell 是作業系統的最外層。shell 合併程式語言以控制程式和檔案,
以及啟動和控制其它程式。shell 透過提示您輸入,向作業系統解釋該輸入,然後處理來自作業系統的
任何結果輸出來管理您與作業系統之間的互動。
shell 向您提供了與作業系統通訊的方式。此通訊以互動的方式(來自鍵盤的輸入立即操作)或作為一
個 shell 指令碼執行。shell 指令碼是 shell 和作業系統命令的序列,它儲存在檔案中。
當您登入到系統中時,系統定位要執行的 shell 的名稱。在它執行之後,shell 顯示一個命令提示符。
此提示符通常是一個 $(美元符)。當您在提示符下輸入命令並按下 Enter 鍵時,shell 對命令進行求
值,並嘗試執行它。取決於您的命令說明,shell 將命令輸出寫到螢幕或重定向到輸出。然後它返回命
令提示符,並等待您輸入另一個命令。
命令列是您輸入所在的行。它包含 shell 提示符。每行的基本格式如下:
$ 命令引數(一個或多個)
shell 視命令列的第一個字(直到第一個空白空格)為命令,所有後繼字為自變數。
本章討論以下內容:
? shell 功能
? Korn shell 或 POSIX shell 命令
? Korn shell 或 POSIX shell 中的引證
? Korn shell 或 POSIX shell 中的保留字
? Korn shell 或 POSIX shell 中的命令別名建立
? Korn shell 或 POSIX shell 中的引數替換
? Korn shell 或 POSIX shell 中的命令替換
? Korn shell 或 POSIX shell 中的算術求值
? Korn shell 或 POSIX shell 中的欄位分割
? Korn shell 或 POSIX shell 中的檔名替換
? Korn shell 或 POSIX shell 中的輸入和輸出重定向
? Korn shell 或 POSIX shell 中的退出狀態
? Korn shell 或 POSIX shell 命令
? Korn shell 或 POSIX shell 內建命令
? Korn shell 或 POSIX shell 的條件表示式
? Korn shell 或 POSIX shell 中的作業控制
? Korn shell 或 POSIX shell 中的直接插入編輯
? Korn shell 或 POSIX shell 內建命令的列表
? Bourne shell 內建命令的列表
? C shell 內建命令的列表
? Bourne shell
? C shell
? Bourne shell
? 受限 shell
? Bourne shell 命令
? Bourne shell 中的變數和檔名替換
? Bourne shell 中的輸入和輸出重定向
? C shell
? C shell 命令
? C shell 中的歷史替換
? C shell 中的別名替換
? C shell 中的變數和檔名替換
? C shell 中的環境變數
? C shell 中的輸入和輸出重定向
? C shell 中的作業控制
shell 功能
透過 shell 與系統互動的主要優點如下:
? 檔名中的萬用字元替換(模式匹配)
透過指定要匹配的模式(而不是實際的檔名)對一組檔案執行命令。
有關更多資訊,請參閱以下內容:
o Korn shell 或 POSIX shell 中的檔名替換
o Bourne shell 中的檔名替換
o C shell 中的檔名替換
? 後臺處理
設定執行時間很長的任務在後臺執行,以釋放終端用於並行互動式處理。
有關更多資訊,請參閱以下章節中的 bg 命令:
o Korn shell 或 POSIX shell 中的作業控制
o C shell 內建命令
注:Bourne shell 不支援作業控制。
? 命令別名建立
給命令或短語一個別名。當 shell 在命令列上或 shell 指令碼中遇到別名時,它替換別名引用的文字。
有關更多資訊,請參閱以下內容:
o Korn shell 或 POSIX shell 中的命令別名建立
o C shell 中的別名替換
注:Bourne shell 不支援命令別名建立。
? 命令歷史
將您輸入的命令記錄在歷史檔案中。可以使用此檔案來輕鬆地訪問、修改和重新發出任何列出的命令。
有關更多資訊,請參閱以下章節中的 history 命令:
o Korn shell 或 POSIX shell 命令歷史
o C shell 內建命令
o C shell 中的歷史替換
注:Bourne shell 不支援命令歷史。
? 檔名替換
使用模式匹配字元在命令列上自動產生檔名的列表。
有關更多資訊,請參閱以下內容:
o Korn shell 或 POSIX shell 中的檔名替換
o Bourne shell 中的檔名替換
o C shell 中的檔名替換
? 輸入和輸出重定向
重定向輸入,使不從鍵盤輸入;重定向輸出到一個檔案或除終端外的裝置。例如,程式的輸入可以從文
件提供,並重定向到印表機或另一個檔案。
有關更多資訊,請參閱以下內容:
o Korn shell 或 POSIX shell 中的輸入和輸出重定向
o Bourne shell 中的輸入和輸出重定向
o C shell 中的輸入和輸出重定向
? 管道
將任何數目的命令連結在一起以形成複雜的程式。一個程式的標準輸出成為下一個程式的標準輸入。
有關更多資訊,請參閱shell 術語中的流水線定義。
? shell 變數替換
儲存使用者定義的變數和預定義的 shell 變數中的資料。
有關更多資訊,請參閱以下內容:
o Korn shell 或 POSIX shell 中的引數替換
o Bourne shell 中的變數替換
o C shell 中的變數替換
可用的 shell
作業系統提供了以下 shell:
? Korn shell(用 ksh 命令啟動)
? Bourne shell(用 bsh 命令啟動)
? 受限 shell(Bourne shell的受限版本,用 Rsh 命令啟動)
? POSIX shell(也稱為 Korn shell,並用 psh 命令啟動)
? 預設 shell(用 sh 命令啟動)
? C shell(用 csh 命令啟動)
? 可信 shell(Korn shell 的受限版本,用 tsh 命令啟動)
? 遠端 shell(用 rsh 命令啟動)
登入 shell指當您登入到計算機系統時裝入的 shell。您的登入 shell 在 /etc/passwd 檔案中設定。
Korn shell是標準作業系統登入 shell,並向後與 Bourne shell 相容(請參閱Bourne shell)。
預設或標準 shell指連結到和用 /usr/bin/sh 命令啟動的 shell。設定Bourne shell 為預設 shell,
且它是 Korn shell 的子集。/usr/bin/sh 駐留為 Korn shell 的副本,它是 /usr/bin/ksh。因此,可
以替換 Korn shell 作為預設 shell。POSIX shell,由 /usr/bin/psh 命令呼叫,駐留為到
/usr/bin/sh 命令的連結。
shell 術語
以下定義在理解 shell 時有幫助:
空白 空白是在 LC_CTYPE 類別中定義的空白字元類中的一個字元。在 POSIX shell 中,空白是
製表符或空格。
內建命令 shell 執行的命令,不對其進行搜尋和建立一個獨立的程式。
命令 shell 語言語法中的字元序列。shell 讀每個命令,並直接地或透過呼叫獨立的實用程式
來執行期望的操作。
註釋 任何以磅符號(#)開始的字。該字和所有它後面的字元,直到下一個換行字元,都被忽略
。
標識 可移植字符集中的字母、數字或下劃線序列,以字母或下劃線開始。標識的第一個字元絕
不能是數字。標識用作別名、函式和命名引數的名稱。
列表 透過以下符號之一分隔的一個或多個流水線的序列:分號(;)、和符號(&)、雙和符號
(&&)或雙欄(||)。列表可選地以下列某一符號結束:分號(;)、和符號(&)或欄和符號(| &)。
;
順序地處理前面的流水線。shell 依次執行每個命令,並等待最近一個命令完成。
&
非同步地處理前面的流水線。shell 依次執行每個命令,在後臺處理流水線而不等待它完成。
|&
非同步地處理前面的流水線,並建立到父 shell 的雙向管道。shell 依次執行每個命令,在後臺處理流水
線而不等待它完成。父 shell 可以是透過使用 read -p 和 print -p 命令從產生的命令的標準輸入讀
取或寫入其標準輸出。在任何給定時刻,只能有一個這樣的命令活動。
&&
僅當前面的流水線返回出口值零(0)時,才處理跟在此符號後的列表。
||
僅當前面的流水線返回非零出口值時,才處理跟在此符號後的列表。
分號(;)、和符號(&)和欄和符號(|&)的優先順序比雙和符號(&&)和雙欄(||)低。;、& 和 |& 符
號之間的優先順序相等。&& 和 || 符號的優先順序相等。可使用一個或多個換行字元而非分號來定界列表中
的兩個命令。
注:|& 符號僅在 Korn shell 中有效。
元字元 每個元字元都對 shell 有特殊的含義,並導致字終止,除非引證它。元字元是:管道(
|)、和符號(&)、分號(;)、小於號(;)、左大括號(()、右大括號())、美元
符($)、反引號(`)、反斜槓 ()、右引號(')、雙引號(")、換行字元、空格字元和製表符。所
有圈起在單引號之間的字元都認為是引證的,並被 shell 逐字地解釋。如果沒有引證,則將保留元字元
的特殊含義。(元字元在 C shell 中也稱為解析器元字元。)
引數賦值列表 包含一個或多個 Identifier=Value 格式的字,其中等號(=)左右的空格必須平
衡。即,必須使用前導空白和末尾空白或無空白。
注:在 C shell 中,引數賦值列表的格式為 set Identifier = Value。需要在等號(=)左右有空格。
流水線 用管道(|)分隔的一個或多個命令的序列。流水線中的每個命令(最後一個命令可能除
外),作為獨立的程式執行。但是,透過管道連線的每個命令的標準輸出成為序列中下一個命令的標準
輸入。如果列表用圓括號圈起,則它作為在一個獨立的子 shell 中操作的簡單命令執行。
如果保留字 ! 不加在流水線前,則退出狀態將為流水線中指定的最後一個命令的退出狀態。否則,退出
狀態是最後一個命令的退出狀態的邏輯“非”。換句話說,如果最後一個命令返回零,則退出狀態將為
1。如果最後一個命令返回大於零,則退出狀態將為零。
流水線的格式如下:
[!] command1 [ | command2 ...]
注:Bourne shell 的早期版本使用插入符 (^) 來表明管道。
shell 變數 將值指定給其的名稱或引數 。透過輸入變數名、等號(=),然後輸入值來指定一
個變數。透過在變數名前加美元符($)來使其可替換指定的值。在為長路徑名建立短標誌法時變數特別
有用,如 $HOME 表示主目錄。預定義的變數是其值由 shell 指定的變數。使用者定義的變數是其值由用
戶指定的變數。
簡單命令 任何順序的可選引數賦值列表和重定向的序列。可選地,後跟命令、字和重定向。它
們由 ;、|、&、| |、&&、|& 或換行字元終止。命令名作為引數 0 傳遞(當由 exec 子例程定義時)。
簡單命令的值是它的退出狀態零(如果它正常終止)或非零(如果它異常終止)。AIX 5L Version 5.2
Technical Reference: Base Operating System and Extensions Volume 2 中的 sigaction、sigvec
或 signal 子例程包含訊號退出狀態值的列表。
子 shell 作為登入 shell 或當前 shell 的子 shell 執行的 shell。
萬用字元 也稱為模式匹配字元。 shell 將它們與指定的值關聯。基本萬用字元是 ?, *, [set] 和
[!set]. 萬用字元在執行檔名替換時特別有用。
字 不包含任何空白的字元序列。字用一個或多個元字元分隔。
建立和執行 shell 指令碼
shell 指令碼提供簡單的方法來執行單調的命令、大的或複雜序列的命令和例程任務。shell 指令碼是包含
一個或多個命令的檔案。當您輸入 shell 指令碼檔案的名稱時,系統執行檔案包含的命令序列。
可以使用文字編輯器建立一個 shell 指令碼。您的指令碼可以同時包含作業系統命令和 shell 內建命令。
以下步驟是寫 shell 指令碼的一般準則:
1. 使用文字編輯器,建立和儲存檔案。可以在 shell 指令碼檔案中包含任何 shell 和作業系統
命令的組合。按照約定,不為許多使用者設定使用的 shell 指令碼儲存在 $HOME/bin 目錄中。
注:作業系統不支援 shell 指令碼中的 setuid 或 setgid 子例程。
2. 使用 chmod 命令僅允許所有者執行(或執行)該檔案。例如,如果將您的檔名為 script1
,請輸入:
chmod u=rwx script1
按下 Enter 鍵。
3. 在命令列上輸入指令碼名稱以執行 shell 指令碼。要執行 script1 shell 指令碼,請輸入:
script1
按下 Enter 鍵。
注:如果在命令列上在 shell 指令碼檔名前輸入 shell 命令(ksh、bsh 或 csh),可以不使用 shell
指令碼可執行就能執行它。例如,要在 Korn shell 的控制下執行名為 script1 的非可執行檔案,請輸入
:
ksh script1
指定指令碼檔案的 shell
當您在 Korn(POSIX shell)或 Bourne shell 中執行可執行檔案 shell 指令碼時,指令碼中的命令在當前
shell(啟動指令碼的 shell)控制下執行,除非您指定不同的 shell。當您在 C shell 中執行可執行文
件的 shell 指令碼時,指令碼中的命令在 Bourne shell(/usr/bin/bsh)的控制下執行,除非您指定不同
的 shell。
透過將 shell 包含在 shell 指令碼中,可以在特定 shell 中執行 shell 指令碼。
要在特定 shell 下執行一個可執行檔案 shell 指令碼,在 shell 指令碼的第一行上輸入 #!Path,並按下
Enter 鍵。#! 字元標識檔案型別。Path 變數指定執行 shell 指令碼的 shell 的路徑名。
例如,要在 Bourne shell 中執行 bsh 指令碼,請輸入:
#!/usr/bin/bsh
按下 Enter 鍵。
當您在 shell 指令碼檔名前輸入一個 shell 命令,則在命令列上指定的 shell 將覆蓋在指令碼檔案本身
中指定的任何 shell。因此,請輸入 ksh myfile 並按下 Enter 鍵在 Korn shell 控制下執行名為
myfile 的檔案,即使 myfile 的第一行是 #!/usr/bin/csh。
Korn shell 或 POSIX shell 命令
Korn shell 是一個互動式命令直譯器和命令程式語言。它符合計算機環境的可移植作業系統介面
(POSIX),一種作業系統的國際標準。POSIX 不是一個作業系統,而是一種標準,它針對原始碼級別的
、很多系統間的應用程式的可移植性。POSIX 功能構建在 Korn shell 之上。Korn shell(也稱為
POSIX shell)提供很多與 Bourne shell 和 C shell 相同的功能,如 I/O 重定向能力、變數替換以及
檔名替換。它還包含幾個其它命令和程式語言功能:
算術求值 Korn shell 或 POSIX shell 可以透過使用內建 let 命令(使用任何從 2 到 36 的
基數)執行整數算術。Korn shell 或 POSIX shell 中的算術求值進一步描述此功能。
命令歷史 Korn shell 或 POSIX shell 儲存記錄您輸入的所有命令的檔案。可以使用文字編輯
器來改變此歷史檔案中的命令,然後重新發出該命令。有關命令歷史功能的更多資訊,請參閱Korn
shell 或 POSIX shell 命令歷史。
聯合程式設施 使您能在後臺執行程式,併傳送資訊到這些後臺程式,及從這些後臺程式接收信
息。有關更多資訊,請參閱聯合程式設施。
編輯 Korn shell 或 POSIX shell 提供直接插入編輯選項,使您能編輯命令列。類似 emacs、
gmacs 和 vi 的編輯器是可用的。Korn shell 或 POSIX shell 中的直接插入編輯進一步描述此功能。
Korn shell 命令是以下之一:
? 簡單命令
? 流水線
? 列表
? 複合命令
? 函式
當您在 Korn shell 或 POSIX shell 中發出命令時,shell 對命令求值,並執行以下操作:
? 進行所有指示的替換。
? 確定命令是否包含 /。如果是,則 shell 執行由指定的路徑名指定的程式。
如果命令不包含 /,則 Korn shell 或 POSIX shell 繼續以下操作:
? 確定命令是否是特殊內建命令。如果是,則 shell 在當前 shell 程式中執行命令。
有關特殊內建命令的資訊,請參閱“Korn shell 或 POSIX shell 內建命令”。
? 將命令與使用者定義的函式作比較。如果命令與使用者定義的函式匹配,則儲存位置引數,然後復
位為函式呼叫的自變數。當函式完成或發出返回時,位置引數列表恢復,並且執行函式中 EXIT 上設定
的任何陷阱。函式的值是上次執行命令的值。函式在當前 shell 程式中執行。
? 如果命令名匹配常規內建命令的名稱,則將呼叫該常規內建命令。
有關常規內建命令的資訊,請參閱“Korn shell 或 POSIX shell 內建命令”。
? 建立程式並嘗試透過使用 exec 命令執行命令(如果命令既不是內建命令也不是使用者定義的函
數)。
Korn shell 或 POSIX shell 搜尋指定路徑中的每個目錄,以查詢可執行檔案。PATH shell 變數定義包
含命令的目錄的搜尋路徑。備用目錄名稱使用 : 分隔。預設路徑是 /usr/bin:(指定 /usr/bin 目錄和
當前目錄,以該順序)。當前目錄由兩個或多個相鄰的冒號,或在路徑列表的開始或結尾的冒號指定。
如果檔案具有執行許可權,但不是目錄或 a.out 檔案,則 shell 假定它包含 shell 命令。當前 shell
程式產生一個子 shell 來讀檔案。所有非匯出的別名、函式和指定的引數從檔案中除去。如果 shell
命令檔案有讀許可權,或者如果已在檔案上設定了 setuid 或 setgid 位,則 shell 執行代理程式,該
代理程式設定許可權並且使用向下傳遞為開啟檔案的 shell命令檔案執行 shell。加圓括號的命令在子
shell 中執行,而不除去非匯出的數量。
本節討論以下內容:
? Korn shell 複合命令
? Korn shell 函式
? Korn shell 或 POSIX shell 內建命令
? Korn shell 或 POSIX shell 的條件表示式
Korn shell 複合命令
複合命令可以是簡單命令和流水線的列表,或者它可以用保留字開始。大多數時候,將在編寫 shell 腳
本時使用複合命令,如 if、while 和 for。
Korn shell 或 POSIX shell 複合命令的列表
for Identifier [in Word ...] ;do List ;done
每次執行 for 命令時,Identifier 引數設定為下一個取自 in Word ... 列表的字。如果省略 in Word
... 命令,則 for 命令對於每個設定的位置引數執行一次 do List 命令。當列表中不再有字時執行結
束。有關位置引數的更多資訊,請參閱“Korn shell 或 POSIX shell 中的引數替換”。
select Identifier [in Word ...] ;do List ;done
select 命令將指定的字集合列印在標準錯誤(檔案描述符 2)上,每個字前有一個數字。如果省略 in
Word ... 命令,則改為使用位置引數。列印 PS3 提示符,並從標準輸入讀取行。如果此行由一個列出
的字的編號組成,則 Identifier 引數的值設定為對應於此編號的字。
如果從標準輸入讀取的行是空的,則再次列印選擇列表。否則,Identifier 引數的值設定為空
。從標準輸入讀取的行的內容儲存在 REPLY 引數中。為每個選擇執行 List 引數,直到遇到中斷或檔案
結束符字元。有關位置引數的更多資訊,請參閱“Korn shell 或 POSIX shell 中的引數替換”。
case Word in [[ ( ] Pattern [ | Pattern] ... ) List ;;] ... esac case 命令執行與匹配
Word 引數的第一個 Pattern 引數關聯的 List 引數。模式的格式與用於檔名替換的格式相同。
if List ;then List [elif List ;then List] ... [;else List] ;fi List 引數指定要執行的
命令列表。shell 首先執行 if List 命令。如果返回零退出狀態,則執行 then List 命令。否則,執
行由跟在 elif 命令後的 List 引數指定的命令。
如果由 elif List 命令中最後一個命令返回的值是零,則執行 then List 命令。如果由 then
List 命令中最後一個命令返回的值是零,則執行 else List 命令。如果沒有由 List 引數指定的命令
為 else 或 then 命令執行,則 if 命令返回零退出狀態。
while List ;do List ;done
until List ;do List ;done List 引數指定要執行的命令列表。while 命令重複地執行由 List
引數指定的命令。如果 while List 命令中最後命令的退出狀態是零,則執行 do List 命令。如果
while List 命令中最後一個命令的退出狀態非零,則迴圈終止。如果未執行 do List 中的命令,則
while 命令返回零退出狀態。可能使用 until 命令代替 while 命令來否定迴圈終止測試。
( List)
List 引數指定要執行的命令列表。shell 在獨立的環境中執行 List 引數。
注:如果需要兩個相鄰的左圓括號用於巢狀,則必須在它們之間插入一個空格,以區別命令與算術求值
。
{ List;}
List 引數指定要執行的命令列表。簡單地執行 List 引數。
注:不同於元字元 ( ), { } 表示保留字(用於特殊目的,不作為使用者宣告的標識)。要識別這些保留
字,必須令其出現在一行的開始或在一個 ; 後。
[[Expression]] 求值 Expression 引數。如果表示式為真,則命令返回零退出狀態。
function Identifier { List ;} 或 function Identifier () {List ;} 定義由 Identifier
引數引用的函式。函式的主體是由 { } 圈起的指定的命令列表。() 由兩個運算子組成,因此將空白字
符與 identifier、( 和 ) 混在一起是允許的,但不是必需的。
time Pipeline
執行 Pipeline 引數。耗用時間、使用者時間和系統時間列印到標準錯誤。
shell 啟動
可以使用 ksh 命令、psh 命令(POSIX shell)或 exec 命令啟動 Korn shell。
如果 shell 由 exec 命令啟動,並且零自變數($0)的第一個字元是連字元(-),則假定該 shell 為
一個登入 shell。 shell 首先從 /etc/profile 檔案讀取命令,然後從當前目錄中的 .profile 檔案或
從 $HOME/.profile 檔案(如果任一檔案存在)讀取命令。接下來,shell 從對 ENV 環境的值執行引數
替換所指定的檔案(如果檔案存在)讀取命令。
如果在呼叫 Korn shell 或 POSIX shell 時指定 File [Parameter] 引數,則 shell 執行由 File 參
數標識的指令碼檔案,包含任何指定的引數。指定的指令碼檔案必須具有讀許可權;忽略任何 setuid 和
setgid 設定。然後 shell 讀取命令。
注:當呼叫 Korn shell 或 POSIX shell 時,不要使用 -c 或 -s 標誌指定指令碼檔案。
有關位置引數的更多資訊,請參閱Korn shell 或 POSIX shell 中的引數替換。
Korn shell 環境
在命令執行的開始時為命令知曉的所有變數(及其關聯的值)組成其環境。此環境包含命令從其父程式
繼承的變數和在呼叫命令的命令列上作為關鍵字引數指定的變數。shell 以幾種方法與環境互動。當它
啟動時,shell 掃描環境併為每個找到的名稱建立引數,給引數相應的值並標記它以用於匯出。執行的
命令繼承該環境。
如果使用 export 或 typeset -x 命令修改 shell 引數的值或建立新值,則引數成為環境的一部分。因
此任何已執行命令看到的環境由最初由 shell 繼承的“名稱-值”對(其值可能被當前 shell 修改過)
加上由使用 export 或 typeset -x 命令產生的任何附加值組成。已執行的命令(子 shell)將看到它
對所繼承環境變數進行的任何修改,但為了使其子 shell 或程式看到修改的值,子 shell 必須匯出這
些變數。
任何簡單命令或函式的環境都透過在前面加一個或多個引數賦值來更改。引數賦值自變數是
Identifier=Value 格式的字。因此,以下兩個表示式是等價的(就命令的執行而言):
TERM=450 Command arguments
(export TERM; TERM=450; Command arguments)
Korn shell 函式
函式保留字定義 shell 函式。shell 以內部方式讀和儲存函式。別名在讀取函式時解析。shell 以與執
行命令相同的方式執行函式,其中自變數作為位置引數傳遞。有關位置引數的更多資訊,請參閱Korn
shell 或 POSIX shell 中的引數替換。
Korn shell 或 POSIX shell 在函式從中呼叫的環境中執行函式。所有以下內容由函式和呼叫指令碼共享
,並可產生副作用:
? 變數值和屬性(除非您在函式中使用 typeset 命令以宣告一個本地變數)
? 工作目錄
? 別名、函式定義和屬性
? 特殊引數 $
? 開啟檔案
以下內容不在函式和呼叫指令碼之間共享,並沒有副作用:
? 位置引數。
? 特殊引數 #。
? 呼叫函式時變數賦值列表中的變數。
? 使用 typeset 命令在函式中宣告的變數。
? 選項。
? 陷阱。但是,被呼叫指令碼忽略的訊號也將被函式忽略。
注:在 Korn shell 的早期版本中,除 EXIT 和 ERR 外的陷阱由函式和呼叫指令碼共享。
如果 0 或 EXIT 上的陷阱在函式的主體內執行,則在函式完成後,在呼叫函式的環境中執行操作。如果
陷阱在函式的主體外執行,則在從 Korn shell 退出時執行操作。在 Korn shell 的早期版本中,函式
的主體外的 0 或 EXIT 上的陷阱不在從函式退出時執行。
當函式執行時,它有“Korn shell 或 POSIX shell 內建命令”中描述的相同的語法錯誤和變數賦值屬
性。
無論何時將函式名指定為簡單命令的名稱,請執行復合命令。命令的運算元將在複合命令的執行期間暫
時成為位置引數。特殊引數 # 也將更改以反映運算元的號碼。特殊引數 0 將不更改。
return 特殊命令用於從函式呼叫返回。函式中的錯誤將控制返回給呼叫程式。
函式標識使用 typeset 特殊命令的 -f 或 +f 選項列出。-f 選項還列出函式的文字。函式用 unset 特
殊命令的 -f 選項取消定義。
函式一般在 shell 執行 shell 指令碼時取消設定。typeset 特殊命令的 -xf 選項允許函式匯出到指令碼,
這些指令碼的執行沒有 shell 的獨立呼叫。必須在 shell 的獨立呼叫間定義的函式應該在 ENV 檔案中使
用 typeset 特殊命令的 -xf 選項定義。
如果函式沒有成功宣告,則該函式定義的退出狀態為零。否則,它將大於零。函式呼叫的退出狀態是由
函式執行的最近命令的退出狀態。
Korn shell 或 POSIX shell 命令歷史
Korn shell 或 POSIX shell 將從您的終端裝置輸入的命令儲存到歷史檔案。如果設定,HISTFILE 變數
值是歷史檔案的名稱。如果 HISTFILE 變數未設定或無法寫,則使用的歷史檔案是 $HOME/.sh_history
。如果歷史檔案不存在,並且 Korn shell 無法建立它,或者它存在但 Korn shell 不具有附加到它的
許可權,則 Korn shell 使用臨時檔案作為歷史檔案。shell 使用具有相應的許可權的同一個歷史檔案
來訪問所有互動式 shell 的命令。
預設情況下,Korn shell 或 POSIX shell 儲存從終端裝置輸入的最後 128 個命令的文字。歷史檔案大
小(由 HISTSIZE 變數指定)是沒有限制的,儘管非常大的歷史檔案可能導致 Korn shell 啟動很慢。
命令歷史替換
使用 fc 內建命令列出或編輯歷史檔案的某些部分。要選擇檔案的一部分編輯或列出,請指定命令的號
碼、第一個字元或頭幾個字元。可以指定單個命令或某一範圍的命令。
如果不將編輯器程式指定為 fc 常規 shell 內建命令的自變數,則使用由 FCEDIT 變數指定的編輯器。
如果未定義 FCEDIT 變數,則使用 /usr/bin/ed 檔案。當您退出編輯器時,已編輯的一個或多個命令打
印並執行。
編輯器名稱連字元(-)用於跳過編輯階段,並再次執行命令。在此情況下,可使用格式為 Old=New 的
替換引數在執行一個命令前修改它。例如,如果 r 是 fc -e - 的別名,則輸入 r bad=good c 執行以
字母 c 開始的最近一個命令,並將第一個出現的 bad 字串替換為 good 字串。
有關使用歷史 shell 命令的更多資訊,請參閱列出先前輸入的命令(history shell 命令)和《AIX 5L
V5.2 命令參考大全》中的 fc 命令。
Korn shell 或 POSIX shell 中的引證
當想要 Korn shell 或 POSIX shell 將字元作為常規字元(而沒有任何通常關聯的含義)讀時,必須引
證它。要取消元字元的特殊含義,請使用下表的其中一個引證機制。
每個元字元對 shell 都有特殊含義(除非已引證)並導致字終止。Korn shell 或 POSIX shell 認為以
下字元是元字元,並且如果它們代表自己就必須已引證。
? 管道(|)
? 和符號(&)
? 分號(;)
? 小於號($lt;)和大於號(>;)
? 左圓括號(()和右圓括號())
? 美元符($)
? 反引號(`)和單引號(')
? 反斜槓 ()
? 雙引號(")
? 換行字元
? 空格字元
? 製表符
引證機制是反斜槓 ()、單引號(')和雙引號(")。
反斜槓 不引證的反斜槓 () 保留後面字元的文字值,除換行外。如果換行字元跟著反斜槓,則
shell 將它解釋為行繼續。
單引號 圈起在單引號( ' ')中的字元保留單引號中的每個字元的文字值。單引號不能出現在
單引號中。
反斜槓不能用於轉義在單引號中設定的字串的單引號。嵌入的引號可透過寫建立,例如:'a'''b' 產
生 a'b。
雙引號 在雙引號(" ")中圈起字元保留雙引號中的所有字元的文字值,除美元符、反引號和反
斜槓字元外,如下:
$
美元符保留其特殊含義:引入引數擴充套件,命令替換的格式和算術擴充套件。
在引證字串中也以 $( 和匹配的 ) 圈起的輸入字元將不受雙引號的影響,但定義當展開字時其輸出替
換 $(...) 的命令。
從圈起的 ${ 到匹配的 } 的字串中,非轉義的雙引號或單引號必須是偶數個(如果有)。前面的反斜
槓字元必須用於轉義文字 { 或 }.
`
反引號保留其特殊含義,引入命令替換的另一格式。引證字串的一部分,從初始的反引號和字元直到
下一個前面沒有反斜槓的反引號,定義當字展開時其輸出替換 ` ... ` 的命令。
僅當後跟以下字元之一時,反斜槓保留其特殊含義(作為一個跳脫字元):$, `, ", 或換行字元。
雙引號前必須有一個反斜槓,以包含在雙引號中。當您使用雙引號時,如果反斜槓後緊跟著將被解釋為
有特殊含義的字元,則刪除反斜槓,且逐字取後繼字元。如果反斜槓不在具有特殊含義的字元之前,則
它保留在適當的位置不更改,且緊跟著它的字元也保留不更改。例如:
"$" ->; $
"a" ->; a
以下條件應用於 Korn 或 POSIX shell 中的元字元和引證字元:
? 當美元符、星號($*)和美元符, @ 符 ($@) 不被引證時,它們的含義在作為引數賦值使用時
或用作檔名時是相同的。
? 當用作命令自變數時,雙引號、美元符、星號、雙引號("$*")等價於 "$1d$2d...",其中 d
是 IFS 引數的第一個字元。
? 雙引號, @ 符, 星號, 雙引號("$@")等價於 "$1" "$2" ...。
? 內反斜槓(``)、反斜槓引證字元反斜槓 ()、單引號(')和美元符($)。如果反引號在雙
引號(" ")中出現,則反斜槓也引證雙引號字元。
? 引數和命令替換髮生在雙引號(" ")內。
? 透過引證保留字的任何字元除去保留字或別名的特殊含義。不能引證函式名或內建命令名。
Korn shell 或 POSIX shell 中的保留字
以下保留字對 shell 有特殊含義:
! case do
done elif else
esac fi for
function if in
select then time
until while {
} [[ ]]
保留字僅在它們不帶引號出現時,以及字用作以下情況時才可識別:
? 命令的第一個字
? 跟在除 case、for 或 in 之外的某一保留字後的第一個字
? case 或 for 命令中的第三個字(在這種情況下,只有 in 有效)
Korn shell 或 POSIX shell 中的命令別名建立
Korn shell 或 POSIX shell 允許您建立別名以定製命令。alias 命令定義 Name=String 格式的字作為
別名。當將別名用作命令列的第一個字時,Korn shell 檢查以檢視它是否已經正在處理具有相同名稱的
別名。如果是這樣,Korn shell 不替換別名。如果具有相同名稱的別名不在處理中,則 Korn shell 使
用別名的值替換別名。
別名的第一個字元可以是除元字元外的任何可列印字元。其餘字元必須與對於有效標識的要求相同。替
換字串可以包含任何有效的 shell 文字,包括元字元。
如果別名值的最後一個字元是空格,則 shell 還為別名替換檢查別名後的字。可以使用別名來重新定義
特殊的內建命令,但不要重新定義保留字。別名定義不在 ksh 的呼叫間繼承。但是,如果指定 alias
-x,則對於根據名稱呼叫和不呼叫獨立 shell 的指令碼,別名仍然有效。要匯出別名定義並使子程式對其
有訪問權,則必須指定 alias -x,以及環境檔案中的別名定義。
要建立、列出和匯出別名,請使用 alias 命令。要除去別名,請使用 unalias 命令。
建立別名的格式如下:
alias Name=String
其中 Name 引數指定別名的名稱,String 引數指定別名的值。
以下匯出的別名是 Korn shell 預定義的,但可以取消設定或重新定義。不建議您更改它們,因為這可
能在以後給期望別名以 Korn shell 預定義方式工作的使用者造成混淆。
autoload='typeset -fu'
false='let 0'
functions='typeset -f'
hash='alias -t'
history='fc -l'
integer='typeset -i'
nohup='nohup '
r='fc -e -'
true=':'
type='whence -v'
在 Korn shell(ksh)的非互動式呼叫上不支援別名;例如,在 shell 指令碼中,或在 ksh 中使用 -c
選項,如下所示:
ksh -c alias
有關別名建立的更多資訊,請參閱建立命令別名(alias shell 命令)和《AIX 5L V5.2 命令參考大全
》中的 alias 命令。
跟蹤的別名
別名經常用作全路徑名的速記。一個別名建立設施選項允許您將別名的值自動設定為對應命令的全路徑
名。這種特殊型別的別名是跟蹤的別名。透過省去 shell 搜尋 PATH 變數以查詢全路徑名的需要,磁軌
的別名提高了執行速度。
set -h 命令開啟命令跟蹤,這樣每次引用命令,shell 將定義跟蹤的別名的值。每次您復位 PATH 變數
,此值取消定義。
這些別名保留跟蹤,這樣下一個後繼引用將重新定義值。幾個跟蹤的別名編譯到 shell 中。
代字號替換
在 shell 執行別名替換後,它檢查每個字以檢視它是否以非引證的代字號 (~) 開始。如果是,則
shell 檢查該字(直到第一個斜槓(/))以檢視它是否與 /etc/passwd 檔案中的使用者名稱匹配。如果
shell 找到匹配,則它用匹配使用者的登入目錄替換 ~ 字元和名稱。此過程稱為代字號替換。
如果 shell 未找到匹配,則不更改原始文字。如果 ~ 字元是字中的唯一字元,或後跟加號(+)或連字
符(-),則 Korn shell 還進行特殊的替換:
~ 由 HOME 變數的值替換。
~+ 由 $PWD 變數(當前目錄的全路徑名)替換。
~- 由 $OLDPWD 變數(前一目錄的全路徑名)替換。
此外,當變數賦值引數的值以代字號 ~ 字元開始時,shell 將嘗試代字號替換。
Korn shell 或 POSIX shell 中的引數替換
Korn shell 或 POSIX shell 使您能夠進行引數替換。
本節討論以下內容:
? Korn shell 中的引數
? 引數替換
? 預定義的特殊引數
? Korn shell 或 POSIX shell 設定的變數
? Korn shell 或 POSIX shell 使用的變數
Korn shell 中的引數
引數定義為以下:
? 任何字元星號(*), @ 符 (@), 磅符號(#), 問號(?), 連字元(-), 美元符($)和感
歎號(!)的標識。這些稱為特殊引數。
? 數(位置引數)指示的自變數
? 標識指示的引數,具有一個值及零個或多個屬性(命名的引數/變數)。
typeset 特殊內建命令將值和屬性指定給命名引數。使用 typeset 特殊內建命令描述 Korn shell 支援
的屬性。匯出的引數將值和屬性傳遞到環境。
命名引數的值透過如下指定:
Name=Value [ Name=Value ] ...
如果為 Name 引數設定了 -i 整數屬性,則 Value 引數服從於算術求值。有關算術表示式求值的更多信
息,請參閱Korn shell 或 POSIX shell 中的算術求值。
shell 支援一維的陣列程式。陣列引數的元素透過下標引用。下標由用方括號 ([ ]) 圈起的算術表示式
指示。要將值指定給陣列,使用 set -A Name Value ...。所有下標的值必須在 0 到 511 範圍內。數
組不需要宣告。任何對帶有效下標的命名引數的引用都是合法的,且將建立一個陣列(如有必要)。引
用沒有下標的陣列等價於引用元素 0。
用 set 特殊命令為位置引數指定值。當呼叫 shell 時從自變數 0 設定 $0 引數。$ 字元用於引入可由
陣列替換的引數。
引數替換
以下是可替換的引數:
${Parameter} shell 讀取從 ${ 到匹配的 } 之間的所有字元,作為同一個字的部分,即使該字
包含大括號或元字元。如果有,替換指定的引數的值。以下情況下大括號是必需的:當 Parameter 引數
後跟一個不被解釋為其名稱一部分的字母、數字或下劃線時,或當一個命名的引數進行下標操作時。
如果指定的引數包含一個或多個數字,則它是一個位置引數。多個數字的位置引數必須圈起在大括號中
。如果變數的值是 * 或 @, 則替換每個以 $1 開始的位置引數(由欄位分隔符字元分隔)。如果使用了
一個帶下標 * 或 @ 的陣列標識,則替換每個元素的值(用欄位分隔符字元分隔)。
${#Parameter} 如果 Parameter 引數的值是 * 或 @, 則替換位置引數的數。否則,替換
Parameter 引數指定的長度。
${#Identifier
} 替換 Identifier 引數指定的陣列中的元素數。
${Parameter:-Word} 如果設定了 Parameter 引數並且不為空,則替換其值;否則,替換 Word
引數的值。
${Parameter:=Word} 如果未設定 Parameter 引數或其為空,則將它設定為 Word 引數的值。不
能用這種方法指定位置引數。
${ParameterWord} 如果設定了 Parameter 引數並且它不為空,則替換其值。否則,列印 Word
變數的值並從 shell 退出。如果省略 Word 變數,則列印標準訊息。
${Parameter:+Word} 如果設定了 Parameter 引數並且它不為空,則替換 Word 變數的值。
${Parameter#Pattern} | ${Parameter##Pattern} 如果指定的 shell Pattern 引數匹配
Parameter 引數的值的開始部分,則此替換的值是 Parameter 引數刪除匹配部分後的值。否則,替換
Parameter 引數的值。在第一種格式中,刪除最小匹配模式。在第二種格式中,刪除最大匹配模式。
${Parameter%Pattern} | ${Parameter%%Pattern} 如果指定的 shell Pattern 匹配 Parameter
變數的值的結束部分,則此替換的值是 Parameter 變數刪除匹配部分後的值。否則,替換 Parameter
變數的值。在第一種格式中,刪除最小匹配模式;在第二種格式中,刪除最大匹配模式。
在先前的表示式中,Word 變數不被求值,除非它用作替換的字串。這樣,在下例中,pwd 命令只在沒
有設定 -d 標誌或它為空時才執行:
echo ${d:-$(pwd)}
注:如果 : 從先前表示式中省略,則 shell 僅檢查是否設定了 Parameter 引數。
預定義的特殊引數
以下引數由 shell 自動設定:
@ 展開位置引數,以 $1 開始。每個引數用一個空格分隔。
如果用 " 圈起 $@, 則 shell 認為每個位置引數是獨立的字串。如果不存在位置引數,則 shell 將
語句展開成沒有引號的空字串。
* 展開位置引數,以 $1 開始。shell 使用 IFS 引數值的第一個字元分隔每個引數。
如果用 " 圈起 $*,則 shell 在雙引號中包含位置引數值。每個值由 IFS 引數的第一個字元分隔。
# 指定傳遞給 shell 的位置引數的數目(十進位制),不計數 shell 步驟名稱本身。這樣 $# 參
數產生設定的最大編號位置引數的數目。此引數的一個主要使用是檢查存在需要的自變數數目。
- 呼叫時或使用 set 命令向 shell 提供標誌。
? 指定上次執行命令的出口值。其值是一個十進位制字串。大多數命令返回 0 以表明成功完成
。 shell 自己返回 $? 引數的當前值作為其出口值。
$ 標識 shell 的程式號。由於程式號在所有現有字串中唯一,所以最多 5 個數字的此字串
經常用於生成臨時檔案的唯一名稱。
下例說明僅用於該目的的,在目錄中建立臨時檔案的推薦示例:
temp=$HOME/temp/$$
ls >;$temp
.
.
.
rm $temp
! 指定最新呼叫的後臺命令的程式號。
零(0) 展開 shell 或 shell 指令碼名稱。
Korn shell 或 POSIX shell 設定的變數
以下變數由 shell 設定:
下劃線(_) 表示當在環境中傳遞時所執行的 shell 或指令碼的最初絕對路徑名。隨後,指定前
一命令的最後一個自變數。此引數不為非同步命令設定。此引數還用於保留檢查郵件時匹配 MAIL 檔案的
名稱。
ERRNO 指定最新失敗的子例程設定的值。此值是系統相關的,並旨在除錯目的。
LINENO 指定執行的指令碼或函式中的當前行的行號。
OLDPWD 表示 cd 命令設定的前一工作目錄。
OPTARG 指定 getopts 常規內建命令處理的最後一個選項自變數的值。
OPTIND 指定 getopts 常規內建命令處理的最後一個選項自變數的索引。
PPID 標識父 shell 的程式號。
PWD 表示 cd 命令設定的當前工作目錄。
RANDOM 生成隨機整數,均一地分佈在 0 和 32767 之間。隨機數的序列可由指定數值給 RANDOM
變數初始化。
REPLY 沒有提供自變數時,由 select 語句和 read 常規內建命令設定。
SECONDS 指定返回 shell 呼叫以來的秒數。如果為此變數指定一個值,則返回引用的值將是被
指定的值加指定以來的秒數。
Korn shell 或 POSIX shell 使用的變數
以下變數由 shell 使用:
CDPATH 表示 cd(更改目錄)命令的搜尋路徑。
COLUMNS 為 shell 編輯方式和列印 select 列表定義編輯視窗的寬度。
EDITOR 如果此引數的值以 emacs、gmacs 或 vi 結束,並且 VISUAL 變數不是使用 set 特殊內
置命令設定的,則對應選項開啟。
ENV 如果設定了此變數,則對值執行引數替換以生成當呼叫 shell 時將執行的指令碼的路徑名。
該檔案通常用於別名和函式定義。
FCEDIT 為 fc 常規內建命令指定預設編輯器名稱。
FPATH 指定函式定義的搜尋路徑。當引用具有 -u 標誌的函式時和未找到命令時,將搜尋此路徑
。如果找到可執行檔案,則在讀和在當前環境中讀和執行它。
HISTFILE 如果在呼叫 shell 時設定此變數,則值是將用於儲存命令歷史的檔案的路徑名。
HISTSIZE 如果在呼叫 shell 時設定此變數,則先前輸入的 shell 可訪問的命令的數將大於或
等於該數。預設值是 128。
HOME 表示您的登入目錄的名稱,該目錄在登入完成後成為當前目錄。登入程式初始化此變數。
cd 命令將 $HOME 引數的值用作其預設值。在 shell 步驟中使用此變數(而非一個顯式路徑名)允許步
驟從不同的目錄執行而無須改動。
IFS 指定 IFS(內部欄位分隔符)(通常是空格、製表符和換行),用於分隔由命令替換或引數
替換產生的命令字,及用於分隔常規內建命令 read 使用的字。IFS 引數的第一個字元用於分隔 $* 替
換的自變數。
LANG 為 LC_* 變數提供預設值。
LC_ALL 重設 LANG 和 LC_* 變數的值。
LC_COLLATE 確定模式匹配中的範圍表示式的行為。
LC_CTYPE 定義字元分類、大小寫轉換和其它字元屬性。
LC_MESSAGES 確定寫訊息的語言。
LINES 確定列印選擇列表的列長度。選擇垂直列印的列表,直到填充了 LINES 變數指定的約三
分之二行。
MAIL 指定郵件系統用於檢測新郵件到達的檔案路徑名。如果此變數設定為郵件檔案的名稱並且
MAILPATH 變數未設定,則 shell 通知使用者指定檔案中的新郵件。
MAILCHECK 指定 shell 多久(以秒計)檢查由 MAILPATH 或 MAIL 變數指定的任何檔案的修改
時間的更改。預設值是 600 秒。當時間過去後,shell 在發出下一提示符前檢查。
MAILPATH 指定由冒號分隔的檔名的列表。如果設定了此變數,則 shell 通知使用者指定檔案的
任何修改,該修改發生在由 MAILCHECK 變數指定的週期(以秒計)期間。每個檔名可後跟 ? 和將打
印的訊息。訊息將經歷變數替換,$_ 變數定義為已更改的檔案的名稱。預設訊息是 you have mail in
$_。
NLSPATH 為處理 LC_MESSAGES 確定訊息編目的位置。
PATH 表示命令的搜尋路徑,它是由冒號分隔的目錄路徑名的有序列表。當 shell 查詢命令時,
它以指定的順序搜尋這些目錄。列表中任何位置的空字串代表當前目錄。
PS1 指定用作主系統提示符的字串。為引數替換展開此引數的值,以定義主提示符字串,缺
省情況下是 $。主提示符字串中的 ! 字元由命令號替換。
PS2 指定次提示符字串的值,預設情況下是 >;。
PS3 指定 select 迴圈中使用的選擇提示符字串的值,預設情況下是 #?。
PS4 為引數替換展開此變數的值,並且它先於執行跟蹤的每一行。如果省略,則執行跟蹤提示符
是 +。
SHELL 指定保留在環境中的 shell 的路徑名。
SHELL PROMPT 當互動地使用時,shell 在讀命令前提示 PS1 引數的值。如果任何時候輸入新行
並且 shell 需要進一步輸入以完成命令,則 shell 發出次提示符(PS2 引數)。
TMOUT 指定在退出前 shell 等待不活動的秒數。如果 TMOUT 變數設定為一個大於零(0)的值
,則在發出 PS1 提示符後未在指示的秒數內輸入命令,shell 退出。(請注意,shell 可以使用不能超
過此值的最大邊界來編譯。)
注:在超時週期到期後,shell 退出前有 60 秒暫停。
VISUAL 如果該變數的值以 emacs、gmacs 或 vi 結束,則開啟對應選項。
shell 將預設值給 PATH、PS1、PS2、MAILCHECK、TMOUT 和 IFS 引數,但是 HOME、SHELL、ENV 和
MAIL 引數不是由 shell 設定的(雖然 HOME 引數是由 login 命令設定的)。
Korn shell 或 POSIX shell 中的命令替換
Korn shell 或 POSIX shell 使您能夠進行命令替換。
在命令替換中,shell 在子 shell 環境中執行指定的命令並用其輸出替換該命令。要在 Korn shell 或
POSIX shell 中執行命令替換,請執行以下命令:
$(command)
或者,對於反引號的版本,使用:
`command`
注:儘管 ksh 接受反引號的語法,但是 X/Open Portability Guide Issue 4 和 POSIX 標準認為它過
時。這些標準建議可移植應用程式使用 $(command) 語法。
shell 透過在子 shell 環境中執行 command 並用命令的標準輸出替換命令替換(command 的文字加圈
起 $( ) 或反引號),在替換的結束除去一個或多個換行字元的序列來展開命令替換。
在下例中,圈起命令的 $( ) 表示 whoami 命令的輸出被替換:
echo My name is: $(whoami)
可以使用以下命令執行同一個命令替換:
echo My name is: `whoami`
使用者 dee 的兩個示例的輸出是:
My name is: dee
還可以透過將它們圈起在 ( ) 中替換算術表示式。例如,命令:
echo Each hour contains $((60 * 60)) seconds
產生以下結果:
Each hour contains 3600 seconds
當執行命令替換時,Korn shell 或 POSIX shell 除去所有末尾換行字元。例如,如果您的當前目錄包
含 file1、file2 和 file3 檔案,則命令是:
echo $(ls)
除去換行字元併產生以下輸出:
file1 file2 file3
要保留換行字元,請將替換的命令插入 " " 中:
echo "$(ls)"
Korn shell 或 POSIX shell 中的算術求值
Korn shell 或 POSIX shell 常規內建 let 命令使您能夠執行整數算術。常數格式為 [Base]Number。
Base 引數是 2 到 36(包括 2 和 36)之間的十進位制數,代表算術基數。Number 引數是以此為基數的
一個數。如果省略 Base 引數,則 shell 使用基數 10。
算術表示式使用與 C 語言相同的語法、優先權和表示式關聯性。支援所有的整數運算子,除雙加號(++
)、雙連字元(--)、問號、冒號(?:)和逗號(,)外。下表以優先權遞減順序列出有效的 Korn
shell 或 POSIX shell 運算子:
運算子 定義
- 一元減號
! 邏輯非
~ 按位非
* 乘法
/ 除法
% 餘數
+ 加法
- 減法
<;>; 左移、右移
<=,>;=, <>;, ==, != 比較
& 按位“與”
^ 按位“異”
| 按位“或”
&& 邏輯“與”
|| 邏輯“或”
= *=, /=, &= +=, -=, <<=, >; >;=&=, ^=, |= 賦值
許多算術運算子,如 *、&、< 和 >;,對 Korn shell 或 POSIX shell 有特殊的含義。必須在這些字元
上加引號。例如,要用 5 乘 y 的當前值,並將新值重新指定給 y,請使用表示式:
let "y = y * 5"
用引號圈起表示式將除去 * 字元的特殊含義。
可以在 let 命令表示式中分組操作以強制分組。例如,在表示式中:
let "z = q * (z - 10)"
命令用 z 的減少的值乘 q。
如果只求值一個表示式,則 Korn shell 或 POSIX shell 包含 let 命令的備用格式。shell 將以 ((
)) 圈起的命令作為引證的表示式處理。因此,表示式:
((x = x / 3))
等價於:
let "x = x / 3"
命名的引數在算術表示式中根據名稱引用,不使用引數替換語法。當引用命名的引數時,其值求值為一
個算術表示式。
使用 typeset 特殊內建命令的 -i 標誌指定命名引數的內部整數表示法。使用 -i 標誌,算術求值對每
個對命名引數的賦值的值執行。如果不指定算術基數,則引數的第一個賦值確定算術基數。引數替換髮
生時使用此基數。
Korn shell 或 POSIX shell 中的欄位分割
在執行命令替換後,Korn shell 掃描替換的結果,以查詢在 IFS(內部欄位分隔符)變數中找到的那些
欄位分隔符字元。在找到這樣字元的地方,shell 將替換分割為不同的自變數。shell 保留顯式空自變
量("" 或 '')併除去隱式空自變數(由不具有值的引數的產生的自變數)。
? 如果 IFS 的值是空格、製表符和換行字元,或如果未設定,則輸入的開始或結束處的任何空
格、製表符和換行字元的序列都將被忽略,並且輸入中的那些字元的任何序列都將定界欄位。例如,以
下輸入產生兩個欄位,school 和 days:
? 否則,如果 IFS 的值非空,則以下規則應用於序列。IFS 空白用於指在 IFS 值中的空白字元
的任何序列(零個或多個例項)(例如,如果 IFS 包含 space/comma/tab,則任何空格或製表符的序列
都認為是 IFS 空白)。
1. IFS 空白在輸入的開始和結束處忽略。
2. 輸入中每個非 IFS 空白的 IFS 字元,以及任何相鄰的 IFS 空白,定界一個欄位。
3. 非零長度 IFS 空白定界欄位。
Korn shell 或 POSIX shell 中的檔名替換
Korn shell 或 POSIX shell 掃描由 Word 變數指定的每個命令字對某些字元執行檔名替換。如果命
令字包含 *、? 或 [ 字元,且未設定 -f 標誌,則 shell 將字當作模式。shell 用與該模式匹配的文
件名替換字,並根據當前語言環境中的有效整理序列排序。如果 shell 未找到與模式匹配的檔名,則
它不更改字。
當 shell 將一個模式用作檔名替換時,. 和 / 字元必須顯式地匹配。
注:Korn shell 在模式匹配的其它例項中不特別地對待這些字元。
這些模式匹配字元表示以下替換:
* 匹配任何字串,包括空字串。
? 匹配任何單個字元。
[...] 匹配任一圈起的字元。由 - 分隔的字元對匹配該對包含範圍中詞典編纂地任何字元,根
據當前語言環境中的有效整理序列。如果跟在開始 [ 後的第一個字元是一個 !,則匹配任何未圈起的字
符。可以透過將 - 置為第一個字元或最後一個字元而使其包含在字符集中。
還可以使用 [] 標誌法來匹配指示範圍中的檔名。此格式指示系統匹配屬於 class 類的任何單個字元
。哪些字元組成一個特定字元類的定義呈現在 setlocale 子例程的 LC_CTYPE 類別中。識別當前語言環
境中指定的所有字元類。
一些字元類的名稱如下:
? alnum
? alpha
? cntrl
? digit
? graph
? lower
? print
? punct
? space
? upper
? xdigit
例如, [[]] 匹配任何大寫字母。
Korn shell 支援基於整理元素、符號或等價類的檔名擴充套件。
PatternList 是一個或多個彼此用 | 分隔的模式的列表。組合模式使用以下一個或多個形成:
?(PatternList) 可選地匹配任何一個給定的模式
*(PatternList) 匹配給定模式的零個或多個出現
+(PatternList) 匹配給定模式的一個或多個出現
@(PatternList) 精確地匹配一個給定模式
!(PatternList) 匹配除一個給定模式外的任何模式
模式匹配具有一些限制。如果檔名的第一個字元是點(.),則它只能由也以點開頭的模式匹配。例如
,* 匹配檔名 myfile 和 yourfile,而不匹配檔名 .myfile 和 .yourfile。要匹配這些檔案,請
使用諸如以下的模式:
.*file
如果模式不匹配任何檔名,則模式本身被作為嘗試的匹配的結果返回。
檔案和目錄不應包含字元 *, ?, -, [ 或 ], 因為它們可以在模式匹配嘗試期間導致無限遞迴(即,無
限迴圈)。
引證除去
存在於原始字中的引證字元反斜槓 ()、單引號(')和雙引號(")將被除去,除非它們本身已引證。
Korn shell 或 POSIX shell 中的輸入和輸出重定向
Korn shell 在執行命令前,掃描命令列中以查詢重定向字元。這些特殊的符號指定 shell 以重定向輸
入和輸出。重定向字元可以在一個簡單命令中的任何位置出現,或者可以出現在命令之前或之後。它們
不傳遞到呼叫的命令。
shell 在使用 Word 或 Digit 引數前執行命令和引數替換,除非另有說明。僅當模式與單個檔案匹配且
不執行空白解釋時,檔名替換才發生。
將建立它。如果檔案存在並且 noclobber 選項開啟,則導致錯誤;否則,檔案截斷成零長度。
>;|Word 與 >;Word 命令相同,除了該重定向語句覆蓋 noclobber 選項。
>; >;Word 使用 Word 引數指定的檔案作為標準輸出。如果檔案當前存在,則 shell 將輸出附
加到檔案(透過首先查詢檔案結束符字元)。如果檔案不存在,則 shell 將建立它。
<>;Word 開啟 Word 引數指定的檔案,以作為標準輸出讀寫。
<
行。shell 不對指定的檔案執行引數替換、命令替換或檔名替換。結果文件(稱為 here 文件)成為
標準輸入。有關 here 文件的更多資訊,請參閱“使用直接插入輸入(Here)文件”。如果 Word 引數
的任何字元已引證,則不對文件的字元執行解釋。
here 文件被視為在下一換行字元後開始,一直繼續到有僅包含定界符的行的單個字,沒有尾部空白字元
。然後下一個 here 文件(如果有)開始。格式如下:
[n]<
delimiter
如果引證了 word 中的任何字元,則透過除去 word 上引證字元形成定界符。here 文件行將不展開。否
則,定界符是 word 自身。如果 word 中沒有引證字元,則 here 文件的所有行將被展開,以進行引數
擴充套件、命令替換和算術擴充套件。
shell 執行重定向資料的引數替換。要防止 shell 解釋 , $ 和單引號(')字元以及 Word 引數的第
一個字元,在字元前加一個 字元。
如果附加 - 到 <>;&Digit 在 Digit 引數指定的檔案描述符中複製標準輸出
>;&- 關閉標準輸出
>;&p 將輸出從聯合程式移動到標準輸出
如果這些重定向選項的某一個之前有一個數字,則引用的檔案描述符號由數字指定(而不是預設值 0 或
1)。在下例中,shell 開啟檔案描述符 2,以寫為檔案描述符 1 的副本。
... 2>;&1
指定重定向的順序是有意義的。在求值時,shell 根據 (FileDescriptor, File) 關聯求值每個重定向
。例如,在語句中:
... 1>;File 2>;&1
檔案描述符 1 與 File 引數指定的檔案關聯。shell 將檔案描述符 2 和與檔案描述符 1(File)關聯
的檔案關聯。如果重定向的順序被反向,則檔案描述符 2 將與終端關聯(假定檔案描述符 1 以前與終
端關聯),而檔案描述符 1 將與 File 引數指定的檔案關聯。
如果命令後跟一個和符號(&)且作業控制不活動,則命令的預設標準輸入是空檔案 /dev/null。否則,
命令執行的環境包含輸入和輸出規範所修改的呼叫 shell 的檔案描述符。
有關重定向的更多資訊,請參閱輸入和輸出重定向。
聯合程式設施
Korn shell 或 POSIX shell 允許您執行一個或多個命令作為後臺程式。這些從 shell 指令碼執行的命令
稱為聯合程式。
透過將 |& 運算子放置在命令後來指定聯合程式。命令的標準輸入和輸出都透過管道傳遞到您的指令碼。
聯合程式必須滿足以下限制:
? 在每個訊息的結尾包含換行字元
? 將每個輸出訊息傳送給標準輸出
? 在每個訊息後清除其標準輸出
下例演示輸入如何傳遞給聯合程式和從聯合程式返回:
echo "Initial process"
./FileB.sh |&
read -p a b c d
echo "Read from coprocess: $a $b $c $d"
print -p "assed to the coprocess"
read -p a b c d
echo "assed back from coprocess: $a $b $c $d"
FileB.sh
echo "The coprocess is running"
read a b c d
echo $a $b $c $d
結果標準輸出如下:
Initial process
Read from coprocess: The coprocess is running
Passed back from coprocess: Passed to the coprocess
要寫入聯合程式,請使用 print -p 命令。要從聯合程式讀取,請使用 read -p 命令。
重定向聯合程式輸入和輸出
聯合程式的標準輸入和輸出透過使用 I/O 重定向重新指定給一個帶號碼的檔案描述符。例如,命令:
exec 5>;&p
將聯合程式的輸入移動到檔案描述符 5。
該操作完成之後,可以使用標準重定向語法,將命令輸出重定向到聯合程式。還可以啟動另一個聯合進
程。兩個聯合程式的輸出都連線到同一個管道,並使用 read -p 命令讀。要停止聯合程式,請輸入:
read -u5
Korn shell 或 POSIX shell 中的退出狀態
shell 檢測到的錯誤(如語法錯誤)會導致 shell 返回非零退出狀態。否則,shell 返回上次命令執行
的退出狀態。shell 透過列印命令或函式名和錯誤情況報告檢測到的執行時錯誤。如果發生錯誤的行號
大於 1,則行號還列印在命令或函式名後的 [ ](方括號)中。
對於非互動式 shell,特殊內建或其它型別命令遇到的錯誤將導致 shell 寫如以下表中顯示的診斷訊息
:
錯誤 特殊內建 其它實用程式
shell 語言語法錯誤 將退出 將退出
實用程式語法錯誤(選項或運算元錯誤) 將退出 將不退出
重定向錯誤 將退出 將不退出
變數賦值錯誤 將退出 將不退出
擴充套件錯誤 將退出 將退出
命令未找到 不適用 可能退出
點指令碼未找到 將退出 不適用
如果任何顯示為“將(可能)退出”的錯誤在子 shell 中發生,則子 shell 將(可能)退出並有非零
狀態,但是包含子 shell 的指令碼由於錯誤將不退出。
在表中顯示的所有情況中,互動式 shell 將在不退出的情況下寫診斷訊息到標準錯誤。
Korn shell 或 POSIX shell 內建命令
特殊命令內建在 Korn shell 和 POSIX shell 中,並在 shell 程式中執行。除非另有指示,否則輸出
被寫入檔案描述符 1,並且如果命令不包含任何語法錯誤則退出狀態為零(0)。允許輸入和輸出重定向
。有兩種型別的內建命令,特殊內建命令和常規內建命令。
特殊內建命令與常規內建命令的差異如下:
? 特殊內建命令中的語法錯誤可能導致執行命令的 shell 結束。如果在常規內建命令中有語法
錯誤則這不會發生。如果特殊內建命令中的語法錯誤不結束 shell,則出口值為非零。
? 使用特殊內建命令指定的變數賦值在命令完整後保留有效。
? I/O 重定向在引數賦值後處理。
此外,跟在 export、readonly 和 typeset 特殊命令後、採用引數賦值格式的字使用與引數賦值相同的
規則展開。代字號替換在 = 後執行,不執行字分割和檔名替換。
有關這些命令的字母順序列表,請參考Korn shell 或 POSIX shell 內建命令的列表
特殊內建命令描述
Korn shell 提供以下特殊內建命令:
: eval newgrp shift
. exec readonly times
break exit return trap
continue export set typeset
unset
: [Argument ...] 僅展開自變數。它在需要命令時使用,如在 if 命令的 then 條件中,但命
令不執行任何操作。
. File [Argument ...] 讀完整的指定檔案,然後執行命令。命令在當前 shell 環境中執行。
由 PATH 變數指定的搜尋路徑用於查詢包含指定檔案的目錄。如果指定了任何自變數,則它們將成為位
置引數。否則,不更改位置引數。退出狀態是最近一條執行的命令的退出狀態。有關位置引數的更多信
息,請參考Korn shell 或 POSIX shell 中的引數替換。
注:在執行任何命令前,.File [Argument ...] 命令讀整個檔案。因此,檔案中的 alias 和 unalias
命令不適用於檔案中指定的任何函式。
break [n] 從封閉的 for、while、until 或 select 迴圈退出(如果存在)。如果您指定 n 參
數,則命令中斷由 n 引數指定的級別號。n 的值是任何等於或大於 1 的整數。
continue [n] 繼續封閉的 for、while 或 until 或 select 迴圈的下一個迭代。如果您指定 n
變數,則命令在第 n 個封閉迴圈處繼續。n 的值是任何等於或大於 1 的整數。
eval [Argument ...] 將指定的自變數作為輸入讀入 shell,並執行(一個或多個)結果命令。
exec [Argument ...] 代替此 shell 執行自變數指定的命令(不建立新程式)。輸入和輸出自
變數可出現並影響當前程式。如果不指定自變數,則 exec 命令修改輸入和輸出重定向列表所指示的文
件描述符。在這種情況下,使用此機制開啟的任何大於 2 的檔案描述符號在呼叫另一個程式時關閉。
exit [n] 退出由 n 引數指定其退出狀態的 shell。n 引數必須是範圍 0-255 的無符號十進位制
整數。如果省略 n 引數,則退出狀態是執行最近命令的退出狀態。檔案結束符字元也退出 shell,除非
set 特殊命令的 ignoreeof 選項開啟。
export -p [Name[= Value]] ... 為自動匯出到後續執行的命令的環境標記指定的名稱。
-p 將所有匯出的變數的名稱和值以下面的格式寫到標準輸出:
"export %s= %sn",
newgrp [Group] 等價於 exec/usr/bin/newgrp [Group] 命令。
注:此命令不返回。
readonly -p [Name[= Value]] ... 將 Name 引數指定的名稱標記為只讀。這些名稱無法由後繼
賦值更改。
-p 將所有匯出的變數的名稱和值以下面的格式寫到標準輸出:
"export %s= %sn",
return [n] 使 shell 函式返回到呼叫指令碼。返回狀態由 n 變數指定。如果省略 n 變數,則返
回狀態是執行最近命令的返回狀態。如果在函式或指令碼外呼叫 return 命令,則它與 exit 命令相同。
set [+ |-abCefhkmnostuvx ] [+ |-o Option]... [+ |-A Name] [Argument ...] 如果未指定
選項或自變數,則 set 命令以當前語言環境的整理序列寫所有 shell 變數的名稱和值。當指定了選項
時,它們將設定或取消設定 shell 的屬性,描述如下:
-A
陣列賦值。取消設定 Name 引數,並從指定的 Argument 引數列表順序地指定值。如果使用了 +A 標誌
,則首先不取消設定 Name 引數。
-a
自動匯出定義的所有後繼引數。
-b
非同步地通知使用者後臺作業的完成。
-C
等價於 set -o noclobber。
-e
執行 ERR 陷阱(如果設定),並且如果命令具有非零退出狀態則退出。讀概要檔案時此方式禁用。
-f
禁用檔名替換。
-h
當第一次遇到時,將每個命令指定為跟蹤的別名。
-k
將所有引數賦值自變數都放入命令的環境,而不只是命令名前的那些自變數。
-m
在獨立的程式中執行後臺作業,並在完成後列印行。後臺作業的退出狀態在完成訊息中報告。在具有作
業控制的系統上,此標誌為互動式 shell 自動開啟。有關更多資訊,請參閱Korn shell 或 POSIX
shell 中的作業控制。
-n
讀命令並檢查其語法錯誤,但不執行它們。對於互動式 shell 忽略此標誌。
-o Option
列印當前選項設定和錯誤訊息(如果沒有指定自變數)。可在單個 ksh 命令列上設定多個選項。如果使
用了 +o 標誌,則取消設定指定的選項。當指定了自變數時,它們將導致設定或取消設定位置引數。由
Option 變數指定的自變數可為以下之一:
allexport
同 -a 標誌。
bgnice
以較低的優先順序執行所有後臺作業。這是預設方式。
emacs
為命令條目輸入 emacs 樣式直接插入編輯器。
errexit
同 -e 標誌。
gmacs
為命令條目輸入 gmacs 樣式直接插入編輯器。
ignoreeof
當遇到檔案結束符字元時不退出 shell。要退出 shell,必須使用 exit 命令,或按下 Ctrl-D 按鍵序
列超過 11 次。
keyword
同 -k 標誌。
注:此標誌僅用於與 Bourne shell 的反向相容性。強烈反對其使用。
markdirs
將 / 附加到作為檔名替換結果的所有目錄名。
monitor
同 -m 標誌。
noclobber
阻止重定向截斷現有檔案。當指定此選項時,必須在重定向符號後跟垂直欄(>;|)以截斷檔案。
noexec
同 -n 標誌。
noglob
同 -f 標誌。
nolog
阻止 .profile 和 $ENV 檔案中的函式定義儲存在歷史檔案中。
nounset
同 -u 標誌。
privileged
同 -p 標誌。
trackall
同 -h 標誌。
verbose
同 -v 標誌。
vi
為命令條目輸入 vi- 樣式直接插入編輯器的插入方式。輸入跳脫字元 033 將編輯器置於移動方式。返
回傳送行。
viraw
在每個字元以 vi 方式輸入時處理它。
xtrace
同 -x 標誌。
-p
禁用 $HOME/.profile 檔案的處理,並使用 /etc/suid _profile 檔案,而非 ENV 檔案。當有效的使用者
標識(UID)或組標識(GID)不等於實際的 UID 或 GID 時,此方式啟用。關閉此選項將 UID 或 GID
設定為實際的 UID 和 GID。
注:由於作業系統不支援 setuid shell 指令碼,所以系統不支援 -p 選項。
-s
按詞典編纂的方式排序位置引數。
-t
在讀和執行一個命令後退出。
注:此標誌僅用於與 Bourne shell 的反向相容性。強烈反對其使用。
-u
替換時將取消設定引數作為錯誤處理。
-v
讀 shell 輸入行時列印它們。
-x
執行命令及其自變數時列印它們。
-
關閉 -x 和 -v 標誌,並停止檢查自變數的標誌。
--
阻止更改任何標誌。在將 $1 引數設定為以 - 開頭的值時,此選項有用。如果沒有自變數跟在此標誌後
,則不設定位置引數。
在任何 set 命令標誌前加 +(而不是 -)關閉標誌。在呼叫 shell 時可以使用這些標誌。標誌的當前
設定可以在 $- 引數中找到。除非指定 -A 標誌,否則剩餘的自變數是位置引數,且按順序指定為 $1、
$2、...,等等。如果沒有給出自變數,則所有命名引數的名稱和值都列印到標準輸出。
shift [n] 重新命名位置引數,以 $n+1 ... 到 $1 ... 開始。n 引數的預設值是 1。n 引數是求
值為小於或等於 $# 引數的非負數的任何算術表示式。
times 列印 shell 和從 shell 執行的程式的累加使用者和系統次數。
trap [Command] [Signal] ... 當 shell 接收到指定的(一個或多個)訊號時執行指定的命令
。Command 引數在設定陷阱時讀一次,在採用陷阱時讀一次。Signal 引數可作為數字或訊號的名稱給出
。陷阱命令以訊號號碼的順序執行。在當前 shell 的入口上忽略的訊號上設定陷阱的任何嘗試都是無效
的。
如果命令是 -,則所有的陷阱復位為其原始值。如果省略命令且第一個訊號是數字訊號號碼,則 ksh 命
令將 Signal 引數的值復位成原始值。
注:如果省略命令且第一個訊號是符號名,則將訊號解釋成一個命令。
如果 Signal 引數的值是 ERR 訊號,則無論何時命具令有非零退出狀態時都執行指定的命令。如果訊號
是 DEBUG,則在每個命令後執行指定的命令。如果 Signal 引數的值是 0 或 EXIT 訊號,且 trap 命令
在函式主體內執行,則在函式完成後執行指定的命令。如果 Signal 引數是 0 或 EXIT(對於在任何函
數外設定的 trap 命令),則在從 shell 退出時執行指定的命令。沒有自變數的 trap 命令列印與每個
訊號號碼關聯的命令列表。
有關 Signal 引數值的完整列表(不帶 SIG 字首在 trap 命令中使用),請參閱 AIX 5L Version 5.2
Technical Reference: Base Operating System and Extensions Volume 2 中的 sigaction、sigvec
或 signal 子例程。
typeset [+HLRZfilrtux [n]] [Name[= Value]] ... 設定 shell 引數的屬性和值。當在函式內
呼叫時,將建立 Name 引數的一個新例項。函式完成時恢復引數值和型別。可以使用 typeset 命令指定
以下標誌:
-H
在非 AIX 機器上提供“AIX 至主機檔案”對映。
-L
左對齊並從 Value 引數中除去前導空白。如果 n 引數具有非零值,則它定義欄位的寬度;否則,它由
其第一個賦值的值的寬度確定。當指定了引數時,它用空白向右填充,或截斷(如有必要)以適合欄位
的長度。如果同時設定了 -Z 標誌,則除去前導零。-R 標誌關閉。
-R
右對齊並用前導空白填充。如果 n 引數具有非零值,則它定義欄位的寬度;否則,它由其第一個賦值的
值的寬度確定。如果重新指定引數,則欄位仍用空白填充,並從末尾截斷。L 標誌關閉。
-Z
如果第一個非空白字元是數字且未設定 -L 標誌,則右對齊並用前導零填充。如果 n 引數具有非零值,
則它定義欄位的寬度;否則,它由其第一個賦值的值的寬度確定。
-f
表示名稱指函式名稱,而不是引數名稱。不能進行賦值,並且僅有的其它有效標誌是 -t、-u 和 -x。-t
標誌開啟此函式的執行跟蹤。-u 標誌使此函式被標記為未定義。當函式被引用時,搜尋 FPATH 變數以
查詢函式定義。-x 標誌允許函式定義在不是 ksh 命令的獨立呼叫的 shell 指令碼中保持有效。
-i
將引數標識為整數,使算術更快速。如果 n 引數具有非零值,則它定義輸出算術基數;否則,第一個賦
值確定輸出基數。
-l
將所有大寫字元轉換成小寫。-u 大寫轉換標誌關閉。
-r
將 Name 引數指定的名稱標記為只讀。這些名稱無法被後繼賦值更改。
-t
標記命名的引數。標記可由使用者定義,並對 shell 無特殊含義。
-u
將所有小寫字元轉換成大寫字元。-l 小寫標誌關閉。
-x
為自動匯出到後續執行的命令的環境標記由 Name 指定的名稱。
使用 + 而不是 - 關閉 typeset 命令標誌。如果不指定 Name 引數但指定標誌,則列印有這些標誌的參
數的名稱(以及值(可選地))列表。(使用 + 而不是 - 阻止列印值。)如果未指定任何名稱或標誌
,則列印所有引數的名稱和屬性。
unset [-fv ] Name ... 取消設定由名稱列表給定的引數的值和屬性。如果指定了 -v,則 Name
指變數名,且 shell 將取消設定它,並將它從環境中除去。無法取消設定只讀變數。取消設定 ERRNO、
LINENO、MAILCHECK、OPTARG、OPTIND、RANDOM、SECONDS、TMOUT 和下劃線(_)變數除去它們的特殊含
義,即使隨後指定它們。
如果設定了 -f 標誌,則 Name 指函式名,且 shell 將取消設定函式定義。
常規內建命令描述
Korn shell 提供以下常規內建命令:
alias fg print ulimit
bg getopts pwd umask
cd jobs read unalias
command kill setgroups wait
echo let test whence
fc
alias [-t ] [-x ] [AliasName[= String]] ... 建立或重新定義別名定義,或將現有別名定義
寫到標準輸出。
有關更多資訊,請參閱《AIX 5L V5.2 命令參考大全》中的 alias 命令。
bg [JobID...] 將每個指定作業置於後臺。如果未指定 JobID 引數,則當前作業置於後臺。有
關作業控制的更多資訊,請參閱Korn shell 或 POSIX shell 中的作業控制。
有關在後臺執行作業的更多資訊,請參閱《AIX 5L V5.2 命令參考大全》中的 bg 命令。
cd [Argument]
cd Old New 此命令可以是兩種格式之一。在第一種格式中,它將當前目錄更改到由 Argument
引數指定的目錄。如果 Argument 引數的值是 -,則目錄更改到前一個目錄。HOME shell 變數是
Argument 引數的預設值。PWD 變數設定為當前目錄。
CDPATH shell 變數定義包含 Argument 引數值的目錄的搜尋路徑。備用目錄名稱由 : 分隔。預設路徑
為空,指定當前目錄。當前目錄由一個空路徑名指定,它緊跟在等號之後或出現在路徑列表中冒號定界
符之間的任何位置。如果指定的自變數以 / 開始,則不使用搜尋路徑。否則,為自變數搜尋路徑中的每
個目錄。
cd 命令的第二種格式在當前目錄名(PWD)中,用由 New 變數指定的字串替換由 Old 變數指定的字
符串,並嘗試更改到該新目錄。
command [-p ] CommandName [Argument ...]
command [-v | -V ] CommandName 使 shell 將指定的命令和自變數作為簡單命令處理,禁止
shell 函式查詢。
有關更多資訊,請參考《AIX 5L V5.2 命令參考大全》中的 command 命令。
echo [String ...] 將字串寫入標準輸出。有關用法和描述,請參考 echo 命令。不支援 -n
標誌。
fc [-r ] [-e Editor] [First [Last]]
fc -l [-n ] [-r ] [First [Last]]
fc -s [Old= New] [First] 顯示命令歷史檔案的內容,或呼叫編輯器以修改和重新執行以前在
shell 中輸入的命令。
有關更多資訊,請參考《AIX 5L V5.2 命令參考大全》中的 fc 命令。
fg [JobID] 將每個指定的作業置於前臺。如果未指定任何作業,命令將當前作業置於前臺。
有關在前臺執行作業的更多資訊,請參考《AIX 5L V5.2 命令參考大全》中的 fg 命令。
getopts OptionString Name [Argument ...] 檢查合法選項的 Argument 引數。
有關更多資訊,請參考《AIX 5L V5.2 命令參考大全》中的 getopts 命令。
jobs [-l | -n | -p ] [JobID ...] 顯示在當前 shell 環境中啟動的作業的狀態。如果未使用
JobID 引數指定特定作業,則顯示所有活動作業的狀態資訊。如果報告了作業終止,則 shell 從當前
shell 環境識別的程式標識列表中除去該作業的程式標識。
有關更多資訊,請參考《AIX 5L V5.2 命令參考大全》中的 jobs 命令。
kill [ -s { SignalName | SignalNumber } ] ProcessID... 傳送一個訊號(預設情況下,
SIGTERM 訊號)到正在執行的程式。此預設操作正常地停止程式。如果要
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/52450/viewspace-974906/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編寫shell指令碼的規範指令碼
- 如何編寫高效的 Shell 指令碼指令碼
- 如何使用zx編寫shell指令碼指令碼
- 技能篇:shell教程及指令碼編寫指令碼
- shell 指令碼如何編寫-致初學者指令碼
- shell編寫服務啟動指令碼指令碼
- shell 指令碼寫法:指令碼
- 編寫可靠 shell 指令碼的 8 個建議指令碼
- 10 個實戰及面試常用 Shell 指令碼編寫面試指令碼
- Shell指令碼入門:編寫格式與執行方式指令碼
- shell-【技術乾貨】工作中編寫shell指令碼實踐指令碼
- Linux 中高效編寫 Shell 指令碼的 10 個技巧Linux指令碼
- shell指令碼之if elif寫法指令碼
- shell指令碼寫氣泡排序指令碼排序
- gdb指令碼編寫指令碼
- Linux系統中Shell指令碼編寫的一點心得Linux指令碼
- 油猴指令碼編寫指令碼
- 編寫git指令碼.shGit指令碼
- shell 指令碼訪問oracle 寫法 (ZT)指令碼Oracle
- EA指令碼編寫要點指令碼
- 編寫執行R指令碼指令碼
- 編譯FFMPEG原始碼的指令碼編寫案例編譯原始碼指令碼
- Shell文字處理編寫單行指令的訣竅
- shell指令碼指令碼
- 寫好shell指令碼的8個建議指令碼
- [轉]寫好shell指令碼的13個技巧指令碼
- systemd 編寫服務管理指令碼指令碼
- Mac 編寫oracle 連線指令碼MacOracle指令碼
- Linux 指令碼編寫基礎Linux指令碼
- Linux指令碼編寫基礎Linux指令碼
- [Shell] Shell 生成 HTML指令碼HTML指令碼
- shell指令碼(二)指令碼
- shell指令碼心得指令碼
- shell指令碼案例指令碼
- 常用shell指令碼指令碼
- 巧用shell指令碼生成快捷指令碼指令碼
- nGrinder中快速編寫groovy指令碼01-指令碼結構指令碼
- shell指令碼(6)-shell陣列指令碼陣列