shell基礎語法2018 03 21

2021-08-17 08:33:45 字數 2892 閱讀 1626

一、shell中的數值運算及運算方式差異

1.      expr:數值運算工具

表示式求值:$(expr 表示式)

$ expr1 + 3

$ expr2 –1

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

$ echo`expr1 + 3`

注意:表示式中,數值和運算子之間要有空格,出現在表示式中要加反引號

其他的表示式形式:$((表示式))    $[表示式]

2. 執行方式差異

當用  sh filename.sh方式執行時,系統會為程式建立子程序,執行完成後,子程序bash內的所有資料便被移除

當用source filename.sh方式執行時,程式便會在父程序中執行,資料會被保留

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

1. 條件判斷命令test

test n1 –引數 n2(或 –引數 表示式)  真的返回0,假的返回1

(1)  整數

比較運算子

-lt小於

-le小於等於

-gt大於

-ge大於等於

-eq等於

-nq不等於

test語句的等價表示式  [ 1 –lt 4 ]  注:表示式與中括號間有空格

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

3. 其他引數

-a 邏輯與

-b 邏輯或

!邏輯非

三、控制流程

簡單舉例:seq命令:產生1-9的數字序列

1. 分支結構

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

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

2. 迴圈結構

for 例子:

for i in `seq1 9`

doecho `expr$i\* 10`

done

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

注意:如果使用這種方式的for i in  在大括號裡不能用變數

3. read:讀取

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

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

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

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

read–p 「please input a num:」 num

4.  while

while例子:求1-100的和

i=1sum=0

while [ $i–le 100 ]

dosum=$[$sum+$i]

i=$[$i+1]

done

echo $sum

break和continue命令都可以接受可選的數值引數,可分別用來指出要中斷(break)或繼續多少個被包含的迴圈

四、shell中的函式

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

    

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

fnamearg1 arg2;#傳遞引數

五、shell中的陣列

1.一般陣列

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

array_var=(1 2 3 4 5 6)

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

array_var[0]="test1"

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

echo $

test1

index=4

echo $

test5

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

echo $

test1 test2 test3 test4 test5

也可以這樣使用

echo $

test1 test2 test3 test4 test5

列印陣列長度:

echo $

2.關聯陣列

shell 提供了另外一種陣列,其可以使用任意的字串作為下標(不必是整數)來訪問陣列元素。這種陣列叫做關聯陣列   (associative array)。

    關聯陣列的下標和值稱為鍵值對,它們是一一對應的關係。在關聯陣列中鍵是唯一的,            值可以不唯一。

需要注意的是,在使用關聯陣列之前,需要使用命令declare -a array 進行顯示宣告

語法                 描述

$   取關聯陣列所有鍵

$   取關聯陣列所有鍵

$    取關聯陣列所有值

$    取關聯陣列所有值

$   關聯陣列的長度

$  關聯陣列的長度

shell 指令碼基礎語法

這句一般在 shell 指令碼的第一行。告訴作業系統,此指令碼的直譯器為 bin sh 這個可執行檔案。類似地,如果你的指令碼用 bash,ksh,解釋,第一行就應該是 bin bash bin ksh 注意 shell 指令碼對空格要求十分嚴格,關鍵字和符號之間必須加空格。1 字串判斷 str1 ...

Shell指令碼語法基礎

shell是linux下的乙個命令解析器,把一系列的命令序列寫入文字檔案就構成了shell指令碼 類似於windows中的批處理 bin sh echo something echo hello world echo hello mkdir tnt 符號 用來指定該指令碼檔案的解析程式。在上面例子中...

Shell基礎語法(中)

if語句 基礎格式 格式1 if 條件 then 語句 fi 格式2 if 條件 then 語句 else 語句 fi 格式3 if then elif then else fi 可以使用 結合多個條件 if a gt 5 a lt 10 then if b gt 5 b lt 3 then 算術比...