linux shell命令列引數用法詳解

2022-09-26 17:06:13 字數 4675 閱讀 5631

習慣使用linux命令列來管理linux系統,例如:

複製** **如下:

$ date

二 11 23 01:34:58 cst 1999  $

使用者登入時,實際進入了shell,它遵循一定的語法將輸入的命令加以解釋並傳給系統。

命令列中輸入的第乙個字必須是乙個命令的名字,第二個字是命令的選項或引數,命令列中的每個字必須由空格或tab隔開,格式如下: 

複製** **如下:

$ command option arguments

一,選項和引數 

選項是包括乙個或多個字母的**,它前面有乙個減號(減號是必要的,linux用它來區別選項和引數),選項可用於改變命令執行的動作的型別。例如: 

複製** **如下:

$ ls 

motd passwd

這是沒有選項的ls命令,可列出當前目錄中所有檔案,只列出各個檔案的名字,而不顯示其他更多的資訊。 

複製** **如下:

$ ls -l 

total 2 

-rw-r--r-- 2 wzh book 22 apr 20 20:37 motd 

-rw-r--r-- 2 wzh book 796 apr 20 20:37 passwd

加入-l選項,將會為每個檔案列出一行資訊,諸如資料大小和資料最後被修改的時間。 

大多數命令都被設計為可以接納引數。引數是在命令列中的選項之後鍵入的乙個或多個單詞,例如:  

複製** **如下:

$ ls -l text  

-rw-r--r-- 2 wzh book 22 apr 20 20:37 motd  

-rw-r--r-- 2 wzh book 796 apr 20 20:37 passwd  

$ 將顯示text目錄下的所有檔案及其資訊。 

有些命令,如ls可以帶引數,而有一些命令可能需要一些最小數目的引數。例如,cp命令至少需要兩個引數,如果引數的數目與命令要求不符,shell將會給出出錯資訊。例如: 

複製** **如下:

$ cp -i mydata newdata

注意:命令列中選項先於引數輸入。 

二,命令列特徵 

命令列實際上是可以編輯的乙個文字緩衝區,在按回車之前,可以對輸入的文字進行編輯。比如利用backspace鍵可以刪除剛鍵入的字元,可以進行整行 刪除,還可以插入字元,使得使用者在輸入命令,尤其是複雜命令時,若出現鍵入錯誤,無須重新輸入整個命令,只要利用編輯操作,即可改正錯誤。 

利用上箭頭可以重新顯示剛執行的命令,利用這一功能可以重複執行以前執行過的命令,而無須重新鍵入該命令。 

bash儲存著以前鍵入過的命令的列表,這一列表被稱為命令歷史表。按動上箭頭,便可以在命令列上逐次顯示各條命令。同樣,按動下箭頭可以在命令列表中 向下移動,這樣可以將以前的各條命令顯示在命令列上,使用者可以修改並執行這些命令。這一特徵將在10.4節中進行詳細的論述。 

在乙個命令列中還可以置入多個命令,用分號將各個命令隔開。例如: 

複製** **如下:

$ ls -f;cp -i mydata newdata 

也可以在幾個命令列中輸入乙個命令,用反斜槓將乙個命令列持續到下一行。 

複製** **如下:

$ cp -i / 

mydata / 

newdata 

上面的cp命令是在三行中輸入的,開始的兩行以反斜槓結束,把三行作為乙個命令列。 

shell中的特殊字元 

shell中除使用普通字元外,還可以使用一些具有特殊含義和功能的特殊字元。在使用它們時應注意其特殊的含義和作用範圍。下面分別對這些特殊字元加以介紹。

三,萬用字元 

萬用字元用於模式匹配,如檔名匹配、路經名搜尋、字串查詢 等。常用的萬用字元有*、?和括在方括號[ ]中的字串行。使用者可以在作為命令引數的檔名中包含這些萬用字元,構成乙個所謂的「模式串」,在執行過程中進 行模式匹配。 斜線(/)必須顯式匹配。例如「*」不能匹配.file,而「.*」才可以匹配.file。 

? 代表任何單個字元。 

[ ] 代表指定的乙個字元範圍,只要檔名中[ ]位置處的字元在[ ]中指定的範圍之內,那麼這個檔名就與這個模式串匹配。方括號中的字元範圍可 以由直接給出的字元組成,nmddmokwvd也可以由表示限定範圍的起始字元、終止字元及中間的連字元(-)組成。例如,f [a- d] 與f [abcd]的作用相同。 shell將把與命令列中指定的模式串相匹配的所有檔名都作為命令的引數,形成最終的命令,然後再執行這個命令。 

這些萬用字元的具體含義。

四,模式串 意 義  

複製** **如下:

*  當前目錄下所有檔案的名稱。 

*text*  當前目錄下所有檔名中包含有text的檔案的名稱。 

[ab-dm]*  當前目錄下所有以a、b、c、d、m開頭的檔案的名稱。 

[ab-dm]?  當前目錄下所有以a、b、c、d、m開頭且後面只跟有乙個字元的檔案的名稱。 

/usr/bin/??  目錄/usr/bin下所有名稱為兩個字元的檔案的名稱。

注意,連字元「-」僅在方括號內有效,表示字元範圍,如在方括號外面就成為普通字元了。而*和?只在方括號外面是萬用字元,若出現在方括號之 內,它們也失去萬用字元的能力,成為普通字元了。例如,模式「- a[*?]abc」中只有一對方括號是萬用字元,*和?均為普通字元,因此,它匹配的字串 只能是- a*abc和- a?abc。 

最後說明一下使用萬用字元時需要注意的一些問題。由於*、?和[ ]對於 shell來說具有比較特殊的意義,因此在正常的檔名中不應出現這些字元。特別是在目錄名中不要出現它們,否則shell匹配起來可能會無窮的遞迴下 去。另外要注意的一點是:如果目錄中沒有與指定的模式串相匹配的檔名,那麼shell將使用此模式串本身作為引數傳給有關命令。這可能就是命令**現特 殊字元的原因所在。 

五,引號 

在shell中引號分為三種:單引號,雙引號和反引號。 nmddmokwvd;

六,單引號 『 

由單引號括起來的字元都作為普通字元出現。特殊字元用單引號括起來以後,也會失去原有意義,而只作為普通字元解釋。例如: 

複製** **如下:

$ string='$path' 

$ echo $string 

$path 

可見$保持了其本身的含義,作為普通字元出現。 

七,雙引號 「 

由雙引號括起來的字元,除$、/、'、和」這幾個字元仍是特殊字元並保留其特殊功能外,其餘字元仍作為普通字元對待。對於$來說,就是用其後指定的變數 的值來代替這個變數和$;對於/而言,是轉義字元,它告訴shell不要對其後面的那個字元進行特殊處理,只當作普通字元即可。可以想見,在雙引號中需要 在前面加上/的只有四個字元$,/,'和」本身。而對」號,若其前面沒有加/,則shell會將它同前乙個」號匹配。 

例如,假定path的值為.:/usr/bin:/bin,輸入命令: 

複製** **如下:

$ teststring=」$path///」/$path」 

$ echo $teststring 

. bin/」$path

大家可以試一下在第二個雙引號之前不加/會產生什麼結果。 

八,反引號 ` 

反引號(`)這個字元所對應的鍵一般位於鍵盤的左上角,不要將其同單引號(')混淆。反引號括起來的字串被shell解釋為命令列,在執行時,shell首先執行該命令列,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。例如: 

複製** **如下:

$ pwd

/home/xyz 

$ string=」c程式設計客棧urrent directory is `pwd`」 

$ echo $string 

current directour is /home/xyz

shell執行echo命令時,首先執行`pwd`中的命令pwd,並將輸出結果/home /xyz取代`pwd`這部分,最後輸出替換後的整個結果。 

利用反引號的這種功能可以進行命令置換,即把反引號括起來的執行結果賦值給指定變數。例如: 

複製** **如下:

$ t程式設計客棧oday=`date` 

$ echo today is $today 

today is mon apr 15 16:20:13 cst 1999

反引號還可以巢狀使用。但需注意,巢狀使用時內層的反引號必須用反斜線(/)將其轉義。

例如: 

複製** **如下:

$ abc=`echo the number of users is /`who| wc-l/`` 

$ echo $abc 

the number of users is 5 

在反引號之間的命令列中也可以使用shell的特殊字元。shell為得到``中命令的結果,它實際上要去執行``中指定的命令。執行時,命令中的特殊字元,如$,」,?等又將具有特殊含義,並且``所包含的可以是任何乙個合法的shell命令,例如: 

複製** **如下:

$ ls 

note readme.txt notice unix.dir 

$ teststring=」`echo $home ` ` ls [nn]*`」 

$ echo $teststring 

/home/yxz note notice

本文標題: linux shell命令列引數用法詳解

本文位址:

linux shell基礎二之命令列引數

執行指令碼時傳遞給指令碼的引數稱為命令列引數。命令列引數用 n 表示,例如,1 表示第乙個引數,2 表示第二個引數,依次類推。請看下面的指令碼 bin bash echo file name 0 echo first parameter 1 echo first parameter 2 echo q...

Linux shell 命令列編輯命令

linux shell 命令列編輯命令 表示ctrl 表示meta 可以用 alt替代 e 跳到行頭 e 跳到行尾 u 刪除游標到行尾的字元 k 刪除游標到行頭的字元 w 向前刪除乙個詞 y 貼上已刪除的東西 f 向前走乙個字元 b 向後走乙個字元 f 向前走乙個詞 b 向後走乙個詞 t 調整空格和...

命令列引數

c 程式設計師參考 main方法可以使用引數,在這種情況下它採用下列形式之一 static int main string args static void main string args main方法的引數是表示命令行引數的string陣列。通常通過測試length屬性來檢查引數是否存在,例如 ...