Linux shell 指令碼總結

2022-01-28 15:39:46 字數 4045 閱讀 3252

-z 判斷 變數的值,是否為空; zero = 0

- 變數的值,為空,返回0,為true

- 變數的值,非空,返回1,為false

-n 判斷變數的值,是否為空 name = 名字

- 變數的值,為空,返回1,為false

- 變數的值,非空,返回0,為true

[ -z "$pid" ] 單對中括號變數必須要加雙引號

[[ -z $pid ]] 雙對括號,變數不用加雙引號

[ 5 -lt 3 -o 3 -gt 2 ] 或者條件成立

[5 -lt 3 ] || [ 3 -gt 2]

[5 -gt 3 ] && [ 3 -gt 2] 成立

if [ -f  file ]    

如果檔案存在

if [ -d ...   ]    

如果目錄存在

if [ -s file  ]    

如果檔案存在且非空

if [ -r file  ]    

如果檔案存在且可讀

if [ -w file  ]    

如果檔案存在且可寫

if [ -x file  ]    

如果檔案存在且可執行

if [ int1 -eq int2 ]    

如果int1

等於int2   

if [ int1 -ne int2 ]    

如果不等於

if [ int1 -ge int2 ]       

如果》=

if [ int1 -gt int2 ]       

如果》if [ int1 -le int2 ]       

如果<=

if [ int1 -lt int2 ]       

如果<

if  [ $a = $b ]                 

如果string1

等於string2

字串允許使用賦值號做等號

if  [ $string1 !=  $string2 ]   

如果string1

不等於string2       

if  [ -n $string  ]             

如果string 非空(

非0),返回

0(true)  

if  [ -z $string  ]             

如果string

為空if  [ $sting ]                  

如果string

非空,返回

0 (和

-n類似

)    

假設有變數

var=

1. #

號擷取,刪除左邊字元,保留右邊字元。

1echo $

其中var

是變數名,

# 號是運算子,

*//

表示從左邊開始刪除第乙個

// 號及左邊的所有字元

即刪除http://

結果是:

號擷取,刪除左邊字元,保留右邊字元。

1echo $

##*/

表示從左邊開始刪除最後(最右邊)乙個

/ 號及左邊的所有字元

即刪除結果是123.htm

3. %

號擷取,刪除右邊字元,保留左邊字元

1echo $

%/*

表示從右邊開始,刪除第乙個

/ 號及右邊的字元

結果是:

4. %%

號擷取,刪除右邊字元,保留左邊字元

1echo $

%%/*

表示從右邊開始,刪除最後(最左邊)乙個

/ 號及右邊的字元

結果是:

5. 從左邊第幾個字元開始,及字元的個數

1echo $

其中的0

表示左邊第乙個字元開始,

5 表示字元的總個數。

結果是:

6.

從左邊第幾個字元開始,一直到結束。

1echo $

其中的7

表示左邊第

8個字元開始,一直到結束。

結果是:

從右邊第幾個字元開始,及字元的個數

1echo $

其中的0-7

表示右邊算起第七個字元開始,

3 表示字元的個數。

結果是:

1238.

從右邊第幾個字元開始,一直到結束。

1echo $

表示從右邊第七個字元開始,一直到結束。

結果是:

123.htm

注:(左邊的第乙個字元是用

0 表示,右邊的第乙個字元用

0-1

表示)數值型別的陣列:一對括號表示陣列,陣列中元素之間使用"空格

"來隔開。

舉個列子

: arr_number=(1 2 3 4 5);

字串型別陣列:同樣,使用一對括號表示陣列,其中陣列中的元素使用雙引號或者單引號包含,同樣使用"空格

"來隔開。

arr_string=("abc" "edf" "sss");

或者arr_string=('abc' 'edf' 'sss');

我們使用數值型別陣列

arr_number=(1 2 3 4 5)

shell

裡面想獲取某個變數的值,使用

$符開頭,如:

$a或者

$即可。

獲取陣列長度

arr_length=$或$

均可,即形式:

$ 可得到陣列的長度。

讀取某個下標的值

arr_index2=$

,即形式:

$對某個下標賦值

這裡需要提出兩個問題:

第乙個問題是如果該下標元素已經存在,會怎麼樣?

答:會修改該下標的值為新的指定值。

例如:arr_number[2]=100

,陣列被修改為

(1 2 100 4 5)

第二個問題是如果指定的下標已經超過當前陣列的大小,如上述的

arr_number

的大小為

5,指定下標為

10或者

11或者大於

5的任意值會如何?

答:新賦的值被追加到陣列的尾部。

例如:arr_number[13]=13

,陣列被修改為

(1 2 100 4 5 13)

刪除操作

清除某個元素:

unset arr_number[1]

,這裡清除下標為

1的陣列;

清空整個陣列:

unset arr_number;

分片訪問

分片訪問形式為:

$,注意,不包括結束下標元素的值。

例如:$

,這裡分片訪問從下標為

1開始,元素個數為4。

模式替換

形式為:

$例如:

$陣列的遍歷

陣列遍歷我們使用

for語句來演示:

for v in $; do

echo $v;

done

Linux shell 指令碼語法總結

1.每個命令之間用 隔開 說明 各命令的執行給果,不會影響其它命令的執行。換句話說,各個命令都會執行,但不保證每個命令都執行成功。2.每個命令之間用 隔開 說明 若前面的命令執行成功,才會去執行後面的命令。這樣可以保證所有的命令執行完畢後,執行過程都是成功的。3.每個命令之間用 隔開 說明 是或的意...

Linux shell指令碼執行方法總結

linux下新建乙個print hello world的指令碼程式,如下所示 boke vim hello.sh boke cat hello.sh bin bash this is hello script echo hello,i am yliu 先來檢視hello.sh的檔案屬性,如下所示 b...

Linux Shell指令碼基礎

shell指令碼在處理自動迴圈或大的任務方面可節省大量時間,且功能強大。任何指令碼都可能有注釋,加注釋需要此行的第乙個字元為 直譯器對此行不予解釋。指令碼不是複雜的程式,它是按行解釋的。指令碼第一行總是以 bin sh開始,這段指令碼通知shell使用系統上的 bourne shell直譯器。指令碼...