Linux 伺服器系統管理第十一章 外殼進階操作  上一頁    下一頁

11-3 Shell 命令格式

內容:

11-3-1 命令格式

每個 Shell 命令可結合許多選項,延伸出更多不同的執行結果,這也是 Shell 最強的地方。當使用者下達某一命令時,可能包含有下列三個內容:

Ø  命令名稱(command):Shell 程式的名稱。

Ø  選項(options):可依照使用者需求給予不同的選項,執行上述命令時,可得到不同的結果。

Ø  引數(arguments):執行命令時給予對應的參數。

我們利用最常使用的 ls 命令,來觀察所給予的選項會出現哪些不同的結果,範例如下:

$ ls -a -l -r -F  /home/tsnien

total 136

-rw-rw-r--    1 tsnien tsnien  209 Mar 30 10:02 t2.c

-rwxrwxr-x    1 tsnien tsnien 4929 Mar 30 10:02 t2*

-rw-rw-r--    1 tsnien tsnien   70 Mar 31 19:15 t1

……

-rwxrwxr-x    1 tsnien tsnien 4738 Mar 30 09:48 a.out*

-rw-r--r--    1 tsnien tsnien  742 Apr 10  2004 .zshrc

drwxr-xr-x    2 tsnien tsnien 4096 Feb 18 12:10 .xemacs/

-rw-------    1 tsnien tsnien 3100 Apr  7 19:53 .viminfo

drwx------    2 tsnien tsnien 4096 Apr  6 11:11 .ssh/

其中所選項有 -a-l-r、以及 -F,引數為 /home/tsnien,各選項功能如下:

Ø  -a:列出所有檔案及目錄(含隱藏檔)

Ø  -l:以『長』列表方式顯示檔案及目錄。

Ø  -r:以相反順序表列。

Ø  -F:增加檔案表示。在每一目錄之後加斜線(/),可執行檔之後加星號(*)。

另外,多個選項也可以組合方式下達,如下:

$ ls -alrF  /home/tsnien

11-3-2 萬用字元

執行命令當中,經常需要輸入某些引數,引數當中也許有一些共通或相似的地方,可用『萬用字元』(Wildcards)來表示。一般系統大多會使用到下列三種萬用字元:

Ø  *』(星號):表示任何長度的任何字元。

Ø  ?』(問號):表示一個任何字元。

Ø  []』(中括號):表示中括號內其中任何一個字元。

範例說明如下:

命令型態

         

$ ls –l hash_2

顯示 hash_2 檔案的詳細資料。

$ls –l h*

顯示有 h 開頭的任何檔案,如 hash_2hash_1hae 等等。

$ls –l *ash*

顯示名稱中有 ash 的任何檔案,如 hash_1 等等。

$ls –l hash_?

顯示 hash_ 開頭且緊接任一字元的檔案,如 hash_1hash_2 hash_3 等等。

$ls –l hash_[123]

顯示 hash_1hash_2 hash_3 檔案。

操作範例如下:

$ ls hash_2.pl      【指定檔案名稱】

hash_2.pl

$ ls h*           【檔案開頭為 h 的任何檔案】

hash_1.pl  hash_2.pl  hash_3.pl  hash_4.pl

$ ls *ash*         【檔案中有 ash 字元的任何檔案】

hash_1.pl  hash_2.pl  hash_3.pl  hash_4.pl

$ ls hash_?.pl      【檔案名稱有 hash_ 後面緊接著任何單一字元】

hash_1.pl  hash_2.pl  hash_3.pl  hash_4.pl

$ ls hash_[12].pl    【檔案名稱為 hash_1 hash_2

hash_1.pl  hash_2.pl

11-3-3 特殊字元使用

一般 Unix/Linux 系統的檔案(或目錄)名稱,大多不允許下列特殊符號出現:

&

*

\

|

[

]

{

}

$

(

)

#

?

/

:

^

!

~

%

;

Shell 操作方面會使用到某些特殊字元,來增強 Shell 命令的功能,較常用到的特殊字元有:

  

   

               

\

\?

取消後面字元的特殊意義。

‘string’

取消在 string 字串中任何字元的特殊意義。

“string”

取消任何字元的特殊意義,除了 $ \

`

`string`

執行在 string 中的指令。

上述特殊字元中,除了反斜線(\)是以單一字元出現外,其他字元都是成雙成對的將某一字串包起來;以下分別說明之。

\ 反斜線】

有一些特殊字元都有其特殊的功能,譬如,問號(?)表示任何一個字元;星號(*)表示任何長度的任何字元。然而,有時候也希望這些字元能表現出它原來的意義,譬如,問號就是 ?,星號就是 *。在此情況下,就必須利用 \ 字元來取消它特殊字元的意義。範例如下:

$ echo * star *

a.out args b_dir dead.letter ex1.c ext2.c f2 Fedora #Fedora# Fedora~ #file-1# f#

$ echo \* star \*

* star *

在第一個 echo 命令,系統將 * 視為任何長度的任何字元;然而在第二個 echo 命令,利用 \ 字元取消 * 的特殊意義。

單引號】

利用兩個單引號包起來的字串,所有特殊字元的意義都被取消。範例如下:

$ echo '*** star ***'

*** star ***

上述可以看出,兩個單引號包起來的星號(*),不再代表其他意思。

` 反向單引號】

反向單引號(`,鍵盤左上角與 “~” 同一按鍵)是 Unix/Linux 系統上常見的特殊符號。兩個反向單引號表示執行內部的指令,範例如下:

$ echo Today is =  `date`

Today is = Sun Jun 12 11:23:37 CST 2005

上述範例可以看出,反向單引號內的命令 date,被執行後再顯示其執行結果。

雙引號】

一般系統或程式語言較常見到的是兩個雙引號()包起來的字串;在 Unix/Linux 系統還是保存著雙引號內表示字串的意思,但也保存某些特殊字元的意義,譬如,$ \ 字元。範例如下:

$ echo "Today is = `date` "

Today is = Sun Jun 12 11:31:30 CST 2005

所以雙引號內的反向單引號還是保留原來的功能。

翻轉工作室:粘添壽

 

Linux 伺服器系統管理 - CentOS:

 

 

 

翻轉電子書系列: