給初學者的入門知識之一(轉)

post0發表於2007-08-11
給初學者的入門知識之一(轉)[@more@]

其實我也是剛剛接觸shell的.感覺這裡氣氛很好.

邊學邊總結,希望對初學的兄弟有幫助,另外也希望高手兄弟們指教多謝

原始碼:

1.建立和執行shell程式

什麼是shell程式呢? 簡單的說shell程式就是一個包含若干行

shell或者linux命令的檔案.

象編寫高階語言的程式一樣,編寫一個shell程式需要一個文字編輯器.如VI等.

在文字編輯環境下,依據shell的語法規則,輸入一些shell/linux命令列,形成一個完整

的程式檔案.

執行shell程式檔案有三種方法

(1)#chmod +x file(在/etc/profile中,加入export PATH=${PATH}:~/yourpath,就可以在命令列下直接執行,像執行普通命令一樣)

(2)#sh file

(3)# . file

(4)#source file

在編寫shell時,第一行一定要指明系統需要那種shell解釋你的shell程式,如:#! /bin/bash,

#! /bin/csh,/bin/tcsh,還是#! /bin/pdksh .

2.shell中的變數

(1)常用系統變數

$ # :儲存程式命令列引數的數目

$ ? :儲存前一個命令的返回碼

$ 0 :儲存程式名

$ * :以("$1 $2...")的形式儲存所有輸入的命令列引數

$ @ :以("$1""$2"...)的形式儲存所有輸入的命令列引數

(2)定義變數

shell語言是非型別的解釋型語言,不象用C++/JAVA語言程式設計時需要事先宣告變數.給一

個變數賦值,實際上就是定義了變數.

在linux支援的所有shell中,都可以用賦值符號(=)為變數賦值.

如:

abc=9 (bash/pdksh不能在等號兩側留下空格 )

set abc = 9 (tcsh/csh)

由於shell程式的變數是無型別的,所以使用者可以使用同一個變數時而存放字元時而存放

整數.

如:

name=abc (bash/pdksh)

set name = abc (tcsh)

在變數賦值之後,只需在變數前面加一個$去引用.

如:

echo $abc

(3)位置變數

當執行一個支援多個命令列引數的shell程式時,這些變數的值將分別存放在位置變數裡.

其中第一個引數存放在位置變數1,第二個引數存放在位置變數2,依次類推...,shell保留

這些變數,不允許使用者以令外的方式定義他們.同別的變數,用$符號引用他們.

3.shell中引號的使用方法

shell使用引號(單引號/雙引號)和反斜線("")用於向shell直譯器遮蔽一些特殊字元.

反引號(")對shell則有特殊意義.

如:

abc="how are you" (bash/pdksh)

set abc = "how are you" (tcsh)

這個命令列把三個單片語成的字串how are you作為一個整體賦值給變數abc.

abc1='@LOGNAME,how are you!' (bash/pdksh)

set abc1='$LOGNAME,how are you!' (tcsh)

abc2="$LOGNAME,how are you!" (bash/pdksh)

set abc2="$LOGNAME,how are you!" (tcsh)

LOGNAME變數是儲存當前使用者名稱的shell變數,假設他的當前值是:wang.執行完兩條命令後,

abc1的內容是:$LOGNAME, how are you!.而abc2的內容是;wang, how are you!.

象單引號一樣,反斜線也能遮蔽所有特殊字元.但是他一次只能遮蔽一個字元.而不能遮蔽

一組字元.

反引號的功能不同於以上的三種符號.他不具有遮蔽特殊字元的功能.但是可以透過他將

一個命令的執行結果傳遞給另外一個命令.

如:

contents=`ls` (bash/pdksh)

set contents = `ls` (tcsh)

4.shell程式中的test命令

在bash/pdksh中,命令test用於計算一個條件表示式的值.他們經常在條件語句和迴圈

語句中被用來判斷某些條件是否滿足.

test命令的語法格式:

test expression

或者

[expression]

在test命令中,可以使用很多shell的內部運算子.這些運算子介紹如下:

(1)字串運算子 用於計算字串表示式

test命令 | 含義

-----------------------------------------

Str1 = str2 | 當str1與str2相同時,返回True

Str1! = str2| 當str1與str2不同時,返回True

Str | 當str不是空字元時,返回True

-n str | 當str的長度大於0時,返回True

-z str | 當str的長度是0時,返回True

-----------------------------------------

(2)整數運算子具有和字元運算子類似的功能.只是他們的操作是針對整數

test表示式 | 含義

---------------------------------------------

Int1 -eq int2|當int1等於int2時,返回True

Int1 -ge int2|當int1大於/等於int2時,返回True

Int1 -le int2|當int1小於/等於int2時,返回True

Int1 -gt int2|當int1大於int2時,返回True

Int1 -ne int2|當int1不等於int2時,返回True

-----------------------------------------

(3)用於檔案操作的運算子,他們能檢查:檔案是否存在,檔案型別等

test表示式 | 含義

------------------------------------------------

-d file |當file是一個目錄時,返回 True

-f file |當file是一個普通檔案時,返回 True

-r file |當file是一個刻讀檔案時,返回 True

-s file |當file檔案長度大於0時,返回 True

-w file |當file是一個可寫檔案時,返回 True

-x file |當file是一個可執行檔案時,返回 True

------------------------------------------------

(4)shell的邏輯運算子用於修飾/連線包含整數,字串,檔案運算子的表示式

test表示式 | 含義

----------------------------------------------------------

! expr |當expr的值是False時,返回True

Expr1 -a expr2|當expr1,expr2值同為True時,返回True

Expr1 -o expr2|當expr1,expr2的值至少有一個為True時,返回True

-----------------------------------------------------------

注意:

tcsh shell 不使用test命令,但是tcsh中的表示式同樣能承擔相同的功能.tcsh

支援的表示式於C中的表示式相同.通常使用在if和while命令中.

tcsh表示式 | 含義

-------------------------------------------------------

Int1 <= int2 |當int1小於/等於int2時,返回True

Int1 >= int2 |當int1大於/等於int2時,返回True

Int1 < int2 |當int1小於int2時,返回True

Int1 > int2 |當int1大於int2時,返回True

Str1 == str2 |當str1與str2相同時,返回True

Str1 != str2 |當str1與str2不同時,返回True

-r file |當file是一個可讀檔案時,返回True

-w file |當file是一個可寫檔案時,返回True

-x file |當file是一個可執行檔案時,返回True

-e file |當file存在時,返回True

-o file |當file檔案的所有者是當前使用者時,返回True

-z file |當file長度為0時,返回True

-f file |當file是一個普通檔案時,返回True

-d file |當file是一個目錄時,返回True

Exp1 || exp2 |當exp1和exp2的值至少一個為True時,返回True

Exp1 && exp2 |當exp1和exp2的值同為True時,返回True

! exp |當exp的值為False時,返回True

-------------------------------------------------------

待續..

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944875/,如需轉載,請註明出處,否則將追究法律責任。

相關文章