C shell 指令說明

C shell 提供下列內建指令。


項目 說明
alias [Name [WordList]] 若未指定任何參數,則顯示所有 alias。否則,指令將顯示 alias 為指定的 Name。如果指定 WordList,則指令將指派WordList 的數值至 alias Name。指定的別名 Name 不能是 aliasunalias
bg [%Job ...] 將現行工作或由工作 所指定的工作置於背景執行,並繼續執行已停止的工作。
break 在最接近含括的 foreachwhile 指令的 end 之後,回復執行。
breaksw 岔斷自 switch 指令;在 endsw 指令後回復。
case Label: 定義 switch 指令中的 Label
cd[Name] 相當於 chdir 指令(請參閱下列說明)。
chdir [Name] 變更現行目錄為由 Name 變數指定的目錄。如果您不指定 Name,指令將變更為您的起始目錄。如果 Name 變數值不是現行目錄的子目錄,且不是以 /./../ 開始,shell 會檢查 cdpath 變數的每一個元件, 看看其是否有子目錄符合 Name 變數。如果 Name 變數是 shell 變數,且其值是以斜線 (/) 當作開頭,則 shell 會試用此變數,以查看它是否為目錄。chdir 指令相當於 cd 指令。
continue 在最接近含括的 while foreach 指令的 end 之後,繼續執行。
default: switch 陳述式標示為 defaultdefault 應該出現在所有其他 case 標籤之後。
dirs 顯示目錄堆疊。
echo 將字串寫入 shell 的標準輸出。
else 執行 if (Expression) then ...else if (Expression2) then ... else ... endif 指令順序中, 第二個 else 後面的指令。
註: 使用 if(expr) then ..else ...endif 時,else 陳述式為 csh 內建指令。如果 (expr) 為真,則會執行指令直到 else 陳述式。如果 (expr) 為假,則會執行 elseendif 陳述式之間的指令。以單引號括住的任何字元都採取文字方式,並且不會解譯。
end 連續將 Name 變數設定為由 List 變數所指定的每一成員,然後執行 foreach 與符合的 end 陳述式之間的一連串 Commands 指令。foreachend 陳述式必須在分隔行上單獨出現。

使用 continue 陳述式,繼續執行迴圈;與 break 陳述式,提前結束迴圈。自終端機讀取 foreach 指令時,C shell 將以 ?(問號)提示, 以輸入指令。迴圈中的指令將以 ? 提示,且不會列入歷程清單之中。

endif 如果 expression 變數為真,將會執行第一個 then 陳述式後面的 Commands。如果 else if Expression2 為真, 將會執行第二個 then 陳述式後面的 Commands。如果 else if Expression2 為假, 將會執行 then 後面的 Commands。可能會有任何數目的 else if 配對。 但僅需要一個 endif 陳述式。else 區段為選用性。 字組 elseendif 只可以使用在輸入行開頭。 if 區 段必須單獨出現在其輸入行,或在 else 指令之後。
endsw 持續將每一 case 標籤和 string 變數值比對。字串為指令與第一個展開的檔名。請在 case 標籤中使用型樣相符字元 *?[ . . . ],它們是由變數展開來的。如果在發現預設標籤前找不到相符的標籤,則依預設標籤執行。case 標籤與 default 標籤必須出現在指令行開頭。breaksw 指令將在 endsw 指令之後執行。否則,控制元將可能落入casedefault 標籤,如同 C 程式設計語言。如果沒有標籤符合且沒有預設值,將會在 endsw 指令之後繼續執行。
eval Parameter  .  . .  讀取輸入至 shell 時的 parameter 變數值,並執行結果指令,或現行 shell 中的指令。使用此指令來執行指令或變數替代所產生的指令,因為會在進行這些替代作業之前先進行剖析。
exec Command 執行現行 shell 中指定的指令
exit (Expression) status shell 變數值(如果未指定 Expression),或以指定的 Expression 數值結束 shell。
fg [%Job ...] 將現行工作或由工作所指定的工作置於前端執行,並繼續執行已停止的工作。
foreach Name (List) Command.  . .   連續設定一個 Name 變數給 List 變數所指定的每個成員,並設定指令順序,直到遇到 end 指令為止。
glob List 使用歷程、變數與檔名擴充顯示 list。將空字元置於字組之間,且在結束時不包括換行字元。
goto Word 繼續執行由 word 變數所指定的指令行。指定的 word 為檔名與展開以產生由 Label: 變數所指定的字串格式的指令。 shell 將盡可能重新整理輸入資料,並搜尋格式為 label: 的指令行,該行可能在空格或標籤之後。
hashstat 顯示統計資料,指出 hash 表如何順利完成尋找指令。
history [-r | -h] [n] 顯示歷程事件清單。最舊的事件最先顯示。如果您指定一數字 n,則只會顯示指定數目的最新事件。 -r 旗標將反轉顯示事件的順序,因此變成先顯示最新的事件。-h 旗標會顯示沒有編號的歷程清單。使用此旗標可產生適合與 source 指令的 -h 旗標一起使用的檔案。
if (Expression) Command 如果指定的表示式 為真,則執行指定的指令(包括其引數)。Command 變數上的變數替代較早發生,與 if 陳述式的其他指令同時發生。指定的指令必須為一簡式指令(非管線,或括弧內的指令清單)。
註: 即使 Expression 變數為假,且未執行 Command 指令,也會發生輸入和輸出重新導向。
jobs [-l] 列出作用中的工作。使用 -l(小寫 L)旗標時, jobs 指令會列出處理程序 ID 與工作號碼及名稱。
kill -l | [[-Signal] % Job...|PID...] TERM(終止)信號或由 signal 所指定的信號傳送至指定的 JobPID(處理程序)。藉由編號或名稱指定信號(如在 /usr/include/sys/signal.h 檔案中所提供的,並去掉 SIG 字首)。-l (lowercase L) 旗標會列出信號名稱。
limit [-h] [Resource [Max-Use]] 由現行處理程序與其所建立的處理程序,限制指定資源的用法。處理資源限制將定義在 /etc/security/limits 檔案中。可控制的資源為中央處理單位 (CPU) 時間、檔案大小、資料大小、核心傾出大小與記憶體使用。當使用者新增至系統中時,這些資源的最大可接受值將設定於 mkuser 指令中。它們將以 chuser 指令變更。

限制分為軟性和硬性。使用者可能增加它們的軟性限制,至由強迫限制實施的上限。您必須有 root 使用者權限,才可增加軟性限制超越強迫限制,或變更強迫限制。-h 旗標顯示強迫限制,而不顯示軟性限制。

如果未指定 Max-Use 參數,limit 指令會顯示指定資源的現行限制。如果未指定 Resource 參數,limit 指令會顯示所有資源的現行限制。如需由 limit 次指令所控制之資源的相關資訊,請參閱Technical Reference: Base Operating System and Extensions, Volume 1中的 getrlimitsetrlimitvlimit 次指令。

CPU 時間的 Max-Use 參數是以 hh:mm:ss 格式指定。其他資源的 Max-Use 參數則指定為浮點數字或整數,其後有時會跟著比例係數。比例係數是 k 或 KB(1024 個位元組)、m 或 MB,或者是 b 或區塊(ulimit 子常式所使用的單位,說明於 Technical Reference: Base Operating System and Extensions, Volume 2)。如果您不指定比例係數,所有資源將使用 k 作為比例係數。就資源 Name 與比例係數二者而言,明確的 Name 字首即已足夠。
註: 只有在其他作用中的處理程序爭相使用系統記憶體時,此指令才會限制可用在處理程序的實體記憶體。
login 結束登入 shell,並置換為 /usr/bin/login 指令的案例。 這是登出的方法之一(包含 kshbsh 指令的相容性)。
logout 結束登入 shell。如果設定 ignoreeof 選項,則需使用此指令。
nice [+n] [Command] 如果未指定數值,則將設定在此 shell 中執行的指令優先順序為 24。如果指定 +n 旗標,則將設定優先順序加上指定的數目。如果指定 +n 旗標與 Command,則將以優先順序 24 加上指定數字來執行 Command。如果您有 root 使用者權限,您可以負數執行 nice 陳述式。Command 一定是在 subshell 中執行,且適用對簡式 if 陳述式中的指令所設的限制。
nohup [Command] 如果未指定 Command,將導致 Script 的其餘部分忽略 hangups。如果有指定 Command,則會導致指定的 Command 執行時,忽略 hangups。如需執行管線或指令清單,請將管線或清單放置在 shell Script 中,提供 Script 執行許可權,並使用 shell Script 作為指令變數值。在背景中以 & 符號 (&) 來執行的所有處理程序都會受到有效的保護,在您登出時, 不會傳送 hangup 信號。不過,這些處理程序仍將明確地傳送 hangups,除非使用 nohup 陳述式。
notify [%Job...] 將導致 shell 通知您何時變更現行工作狀態或指定的工作。一般而言,shell 將在顯示 shell 提示前提供通知。如果設定 notify shell 變數,此特性將成為自動。
onintr [- | Label] 控制 shell 岔斷動作。若未指定引數,將還原 shell 的岔斷預設動作,此舉將結束 shell Script,或回到指令輸入層次。如果指定 - 旗標,將導致所有岔斷被忽略。如果有指定 Label,當 shell 收到岔斷或當子處理程序由於岔斷而結束時, 將導致 shell 執行 goto Label 陳述式。不論如何,如果 shell 正在分開執行,且岔斷被忽略,則所有格式的 onintr 陳述式將無意義。shell 與所有被呼叫的指令將繼續忽略岔斷。
popd [+n] 存取目錄堆疊,並變更至新的頂端目錄。如果有指定 +n 變數,指令將會捨棄堆疊中的第 n 個項目。目錄堆疊的元素自頂端從 0 開始編號。
pushd [+n|Name] 如果沒有引數,將交換目錄堆疊最頂端的 2 個元素。利用 Name 變數,指令將會變更為新的目錄,並將舊的現行目錄(如在 cwd shell 變數中所提供的)推向目錄堆疊。如果有指定 +n 變數,指令會輪換目錄堆疊中的第 n 個元件直到項端元素,然後變成它。目錄堆疊的成員自頂端,從 0 開始編號。
rehash 將導致 path shell 變數中的目錄內容的內部 hash 表重新計算。 如果新的指令在您登入時,新增至 path shell 變數中的目錄,則需要此動作。只要新增至其中一個使用者自己的目錄,或如果有人變更其中一個系統目錄,則需要執行 rehash 指令。
repeat Count Command 遵循在指令簡式 if 陳述式中相同的限制,與由 Count 所指定的次數,執行指定的 Command
註: I/O 重新導向只會發生一次,即使 Count 變數等於 0 也是如此。
set [[Name[n]] [ = Word]] | [Name = (List)] 當不使用引數時,顯示所有 shell 變數的值。具有一個以上單一字組的變數,將顯示為一使用括弧的字組清單。如果只指定 Name ,C shell 將設定 Name 變數為空字串。否則將設定 Nameword 變數值,或設定 Name 變數為由 List 變數所指定的字詞清單。有指定 n 時, Name 變數的第 n 個元件會設定為 Word 變數的值;第 n 個元件必須已存在。不論如何,數值為指令與檔名的擴充。這些引數可能在單一 set 指令中,重複設定多重數值。然而,變數擴充在任何設定前,將發生在所有引數身 上。
setenvName Value 將由 Name 變數所指定的環境變數值設定為 value,一單一字串。最常使用的環境變數 USERTERMHOMEPATH 會自動匯入 C shell 變數 usertermhomepath,並且會自動從這些 C shell 變數中匯出。這些變數使用 setenv 陳述式。
shift [Variable] argv shell 變數的成員,或指定的 Variable 移位至左邊。如果未設定 argv shell 變數或指定的 Variable,或其值少於一個字詞,將會發生錯誤。
source[-h] Name 讀取在 Name 檔案中撰寫的指令。您可將 source 指令作巢狀處理。然而,如果巢狀太深,shell 將可能會用盡檔案描述子。任何層次所發生的 source 指令錯誤,將結束所有巢狀 source 指令。一般而言,在 source 指令中的輸入, 將不會列入歷程。-h 旗標將導致指令置於歷程清單中,而不予執行。
stop [%Job ...] 停止現行工作,或在背景 執行的指定工作
suspend 停止 shell,如同已接收 STOP 信號。
switch (string) 開始 switch (String) case String : ... breaksw default: ... breaksw endsw 指令順序。此指令序列根據 String 變數的值來連續與每一個 case 標籤相比對。如果在發現預設標籤前無符合的標籤,則依預設值標籤執行。
time [Command] time 指令控制指令自動計時。如果未指定 Command 變數,則 time 指令會顯示此 shell 與其子項使用的時間摘要。如果使用 Command 變數指定指令,將會進行計時。然後 shell 將顯示時間總結,如 time shell 變數說明。如有必要將建立額外 shell,在指令完成時,將顯示時間統計值。
下列範例使用 timesleep 指令:
time sleep
此指令的輸出值看起來像下面這個樣子:
0.0u 0.0s 0:00 100% 44+4k 0+0io 0pf+0w

輸出欄位如下:

第一
投注在使用者處理程序的 CPU 時間秒數。
第二
由核心代表使用者處理程序使用的 CPU 時間秒數。
第三
指令經歷過的(壁鐘)時間
第四
總計使用者 CPU 時間加上系統時間,作為使用時間的百分比。
第五
已使用的共用記憶體平均數量,加上已使用的非共用資料空間,以千位元組計算
第六
輸入和輸出作業區塊數目
第七
尋頁錯失加上交換數目
umask [Value] 決定檔案的許可權。此 value 與建立處理程序許可權,在檔案建立時,決定檔案的許可權。預設值為 022。若未指定 value ,則會顯示現行設定。
unalias *|Pattern 捨棄所有符合 Pattern 變數的 alias, 所有 alias 將由 unalias * 指令移除。沒有 alias 並不會導致錯誤。
unhash 停用內部 hash 表,以尋找執行中的程式。
unlimit [-h][Resource] 移除 Resource 變數的限制。如果沒有指定 Resource 變數,會移除所有的資源限制。請參閱 limit 指令的說明,以取得 Resource 名稱的清單。

-h 旗標將移除相對應的強迫限制。只有具有 root 使用者權限的使用者才可變更強迫限制。

unset *|Pattern 移除全部符合型樣變數的 Name 變數。使用 unset *,移除全部變數。若未設定變數並不會導致錯誤發生。
unsetenvPattern 從其名稱符合指定 Pattern 的環境中移除所有的變數 (請參閱 setenv 內建指令)。
wait 等待所有背景 工作。如果 shell 為互動式,INTERRUPT(通常是 Ctrl-C 鍵順序)會中斷等待。然後 shell 將顯示未執行的所有工作的 Name 與工作號碼。
while (Expression) Command.  . .  end 當由 Expression 變數指定的表示式評估為非零值時,會評估 while 與配對的 end 陳述式之間的 Commands。您可使用 break 陳述式提前結束,並使用 continue 陳述式繼續迴圈。whileend 陳述式必須單獨出現在它們的輸入行中。如果輸入是來自終端機,則會在類似 foreach 陳述式的 while (Expression) 之後出現提示。
@ [Name[n] = Expression] 當不使用引數時,顯示所有 shell 變數的值。否則將設定由 Name 變數指定的 Name 為 Expression 變數的值。如果表示式包含 <>&| 字元,這部分的表示式必須放置在括弧內。有指定 n 時, Name 變數的第 n 個元件會設定為 Expression 變數。Name 變數及其第 n 個元件都必須存在。

可使用 C 語言運算子(例如 *=+=)。隔開 Name 變數與指派運算子的空格為選用性的。無論如何,然而,隔開表示式變數元件的空格是必要的,否則該元件將會視為一單一字組。特殊字尾運算子、雙加號 (++) 及雙連字號 (--) 將分別增加及減少 Name 變數的值。