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:增加檔案表示。在每一目錄之後加斜線(/),可執行檔之後加星號(*)。
另外,多個選項也可以組合方式下達,如下:
11-3-2
萬用字元
執行命令當中,經常需要輸入某些引數,引數當中也許有一些共通或相似的地方,可用『萬用字元』(Wildcards)來表示。一般系統大多會使用到下列三種萬用字元:
Ø
『*』(星號):表示任何長度的任何字元。
Ø
『?』(問號):表示一個任何字元。
Ø
『[]』(中括號):表示中括號內其中任何一個字元。
範例說明如下:
命令型態 |
說
明 |
$ ls
–l hash_2 |
顯示
hash_2
檔案的詳細資料。 |
$ls
–l h* |
顯示有
h
開頭的任何檔案,如
hash_2、hash_1、hae
等等。 |
$ls
–l *ash* |
顯示名稱中有
ash
的任何檔案,如
hash_1
等等。 |
$ls
–l hash_? |
顯示
hash_
開頭且緊接任一字元的檔案,如
hash_1、hash_2
或
hash_3
等等。 |
$ls
–l hash_[123] |
顯示
hash_1、hash_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 |
所以雙引號內的反向單引號還是保留原來的功能。
|