Shell 變數與陣列

2021-06-05 14:52:51 字數 2669 閱讀 5957

像其他程式語言一樣,shell語言支援變數賦值操作。shell的變數宣告時沒有型別的概念。而且從某種意義上來說,shell變數不需要宣告,在給變數賦值的同時就指定了變數的型別及變數的值。變數的使用極大地增強了指令碼的靈活性。

變數宣告           很簡單,格式是「變數=值」,注意在等式的兩邊不能有空格。如果兩邊均有兩個空格,「變數 = 值」則是測試變數與值是否相等。而如果只在等號前面有空格,「變數 =值」,shell會尋找以變數為名的命令,然後加「=值」引數執行

line_num=35        #宣告乙個數值型變數,值為35

name='westnorth' #宣告乙個字串型變數,內容是westnorth

除了這樣宣告變數外,還可以宣告乙個數值型變數為二進位制、八進位制或十六進製制型別
let "num_dec = 40"

echo " the num is = $num_dec" #輸出結果為40,這是最普通的定義數值的方法,預設是十進位制數值

let "num_oct = 040"

echo "oct = $num_oct" #顯示結果為32,這是定義八進位制數值的方法,只需要在數字前面加上數字0即可

let "hex = 0x40"

echo "hex = $hex" #顯示結果為64,這是定義十六進製制數值的方法。在變數的值前加上0x或0x即可

給變數賦乙個數學表示式的值          如果要給變數賦乙個數學表示式的值,就不能直接使用等號了。 使用「a=3+2」,並不會讓a等於5,而是讓a等於「3+2」,成為乙個字串。正確的方式應該是使用set關鍵字,

set a=3+2

set a1=3*3-$a

給變數賦乙個命令的執行結果

b=$(ls -l)
這樣就將「ls -l」的執行結果賦予變數b。只要在標準輸出中有輸出內容的命令均可將其輸出內容賦予乙個變數。

使用變數     在shell提取變數,應使用操作符「$」。命令列中宣告變數,然後引用變數的用法

(1)宣告變數

***$ name='westnorth'

(2)引用變數

***$ echo $name

(3)將ls -l命令的輸出賦予變數content

***$ content=$(ls -l)

(4)引用變數content,將其顯示出來

***$ echo $content #使用$content變數引用變數,注意這種方式引用變數,會消除所有回車標記

(5)由於前面輸出不理想,換種方式,將引用變數的**用雙引號括起來

***$ echo "$content"

#使用帶雙引號的$content引用變數,這種法師輸出的內容保留了原有回車符。

***$ echo '$content'

#如果使用單引號試圖引用變數,則會出現如下結果

$content

有時候會出現普通文字與命令輸出混合顯示的情況,這種情況下輸出命令有點特殊,
1)定義乙個變數,作為顯示之用

***$ num=18

2)使用前文所述方法引用變數

***$ echo $numyears can smoke

#如果要將變數值與普通文字混合顯示,直接使用會出現錯誤,上述**會指示shell去尋找乙個名叫numyears的變數,如果使用者並未定義該變數的話,顯示 can smoke

3)使用正確的方法顯示文字與命令混合的情況

***$ echo $years can smoke

#使用大括號將變數括起來,就可以混合顯示變數與普通文字 18years can smoke

取消變數     unset命令

***$ name='westnorth'

***$ echo "name=$name"

***$ unset name #取消變數

***$ echo "name=$name"

name= #顯示該變數會得到乙個空的輸出結果

系統變數       引數位置變數  「$」後跟乙個數字可獲得指令碼檔案執行時輸入的引數值。「$0」是當前指令碼的檔名,然後「$1」是第乙個引數,「$2」是第二個引數,依次類推。如果引數值多餘9個,使用時需要加上大括號,如用$來獲得第十個引數            $*: 將所有的引數作為乙個單詞來引用     $@: 與「$*「有相同的作用,但將每個引數作為乙個單詞來引用。這就意味著得到的引用是乙個字元陣列。

內部變數     

陣列

declare -a array #第一種方法

array[23]="bmw" #第二種方法

使用$提取其值。$
#!/bin/bash

decalare -a arr1 #顯示宣告乙個陣列

arr1[1]="abcd" #給該數字的第1個元素賦初值

array[11]=11; #直接定義乙個陣列,並同時將第11個元r賦值為11

echo "array no.11 is $" #顯示兩個陣列的元素

echo 「unknow arr1 is $」 #顯示未賦值的元素 會顯示乙個空字串

Shell 七 陣列變數

普通陣列 只能使用整數作為陣列索引 關聯陣列 可以使用字串作為陣列索引 方法一 一次賦乙個值 陣列名 下標 變數值 array1 0 pear array1 1 array1 2 orange array1 3 peach echo 方法二 一次賦多個值 array2 tom jack alice ...

shell 變數與環境變數

參考書籍 linux shell 指令碼攻略 變數是任何一種程式語言必不可少的組成部分,用於存放各類資料。指令碼語言通常不需要在使用變數之前宣告其型別,只需要直接賦值就可以了。在bash中,每乙個變數的值都是字串,都是以字串的形式儲存。環境變數 被shell環境或作業系統用來儲存一些特別的值的特殊的...

shell 函式與陣列

2.陣列 2.5陣列的替換 3.shell指令碼除錯 函式在shell指令碼中僅在當前shll環境中有效,shell指令碼中變數預設全域性有效 若將變數限定在函式內部使用,在變數前加local命令 function 函式名 function可省略 return x x為數值,即執行完返回乙個值,0或...