shell指令碼語法

2021-08-17 08:33:45 字數 3044 閱讀 6379

一、數值運算

1)expr數值運算工具

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22

#給變數aa和變數bb賦值

[root@localhost ~]# dd=$(expr $aa + $bb)

#dd的值是aa和bb的和。注意「+」號左右兩

側必須有空格

2)表示式求值:

$ expr1 + 3

$ expr2 –1

$ expr1 \* 3 使用*要加轉義符

$ echo `expr1 + 3`

注意:表示式中,數字和運算子指教要有空格,出現在語句中要加反引號

3)「$((表示式))」或「$[表示式]」

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22

[root@localhost ~]# ff=$(( $aa+$bb ))

[root@localhost ~]# gg=$[ $aa+$bb ]

二、判斷式及控制流程語句

1)條件判斷命令test

test n1 -引數n2(或–引數表示式)

真返回0,假返回1。

test 1–lt4#判斷1<4

echo $?#結果為0

·test語句的等價形式[ 1 –lt4 ]

可用中括號代替test,把表示式括起來實現判斷

注意表示式與中括號間有空格。

-lt小於

-le小於等於

-gt大於

-ge大於等於

-eq等於

-ne不等

2)檔案測試

-f存在且是普通檔案

-d存在且是目錄

-s存在且位元組數大於0

-r存在且可讀

-w存在且可寫

-x存在且可執行

3)字串測試

test s 字串s非空

test s1 = s2字串s1等於s2

test s1 != s2字串s1不等於s2

test-z s字串長=0,即為空串

test -n字串長》0

4)其他引數

-a邏輯與

-o邏輯或

!邏輯非

5)分支結構

if分支

if [ $# -eq0 ]

then

echo 「輸入了0個引數」

elif[ $# -gt 1 ]

then echo 「輸入了多個引數」

else echo 「輸入了1個引數」

ficase

case 「$#」 in

0)echo 「輸入了0個引數」;;

1)echo 「輸入了1個引數」;;

*)echo 「輸入了多個引數」;;

esac

每個分支條件後必須以兩個分號結尾

6)迴圈結構

for 例子——輸出100內10的倍數

#for iin #大括號中不能有變數

for iin `seq1 9`

doecho `expr$i\* 10`

done

或寫echo $(expr$i\* 10)

注:如果使用這種方式的for iin #在大括號中不能用變數

乘號前加轉義符,

與數字間要有空格。

7)read 變數1 [變數2 …]

可以從鍵盤上讀取多個變數的值,使用者輸入資料時,以空格或者tab鍵作為分隔。

如果輸入的資料個數不夠,則從左到右對應賦值,沒有輸入的變數為空;

如果輸入的資料個數超了,則從左到右對應賦值,最後乙個變數被賦予剩餘的所有資料。

-p:指定讀取值時的提示符;

三、shell中的函式

1)定義函式

定義函式的格式為:函式名()

函式名()

兩者方式都可行。如果願意,可在函式名前加上關鍵字f u n c t io n,這取決於使用者。

f u n c t io n 函式名()

所有函式在使用前必須定義。這意味著必須將函式放在指令碼開始部分,直至shell直譯器首次發現它時,才可以使用。呼叫函式僅使用其函式名即可。

2)引數可以傳遞給函式,並由指令碼進行訪問:

fnamearg1 arg2;#傳遞引數

以下是函式fname的定義:

fname()

shell中的函式

四、shell陣列

1)陣列定義

可以在單行中使用一列值來定義乙個陣列:

array_var= (1 2 3 4 5 6)

#這些值將會儲存在以0為起始索引的連續位置上

另外,還可以將陣列定義成一組「索引-值」:

array_var[0]="test1"

array_var[1]="test2"

array_var[2]="test3"

array_var[3]="test4"

array_var[4]="test5"

2)列印出特定索引的陣列元素內容:

echo $

test1

index=4

echo $

test5

3)以清單形式列印出陣列中的所有值:

echo $

test1 test2 test3 test4 test5

也可以這樣使用

echo $

test1 test2 test3 test4 test5

4)列印陣列長度:

echo $

6)語法                             描述

$            取關聯陣列所有鍵

$          取關聯陣列所有鍵

$             取關聯陣列所有值

$           取關聯陣列所有值

$           關聯陣列的長度

$         關聯陣列的長度

Shell指令碼語法

定義單變數 p name kang 使用單變數 echo p name js 輸出kang.js echo p name.js 輸出kang.js cp p name.js copy.js 命令1 命令2 如果左邊的 命令1 執行成功,那麼右邊的 命令2 才會被執行。命令1 命令2 與 相反。如果 ...

shell指令碼 語法

條件測試 test 命令test 可以測試乙個條件是否成立,如果測試條件為真,則該命令的exitstatus為0,反之,exitstatus為1。注意 命令 各引數之間應該用空格隔開,以 結尾。但是 不是命令。測試命令 d dir 如果dir存在並且是乙個目錄則為真 f file 如果file存在並...

shell指令碼語法

測試乙個條件是否成立,python ubuntu 1004 var 2 python ubuntu 1004 test var python ubuntu 1004 echo 0python ubuntu 1004 test var gt 5 python ubuntu 1004 echo 1或者 ...