2017年12月1日 星期五

『Bash Shell』如何宣告變數 Variable 程式範例/完整說明

變數 Variable 用來儲存值 Value,變數的型態有四種
1. 整數 (Integer)
2. 索引式陣列 (Indexed Array)
3. 關聯式陣列 (Associative Array)
4. 字串 (String)

變數的型態以變數本身帶有的屬性來表示,屬性如下

1. 屬性 i: 有此屬性的變數是整數 (Integer)
2. 屬性 a: 有此屬性的變數是索引式陣列 (Indexed Array)
3. 屬性 A: 有此屬性的變數是關聯式陣列 (Associative Array)
4. 屬性 r: 有此屬性的變數表示變數值是唯讀 (Read-only)

注意:沒有 i, a, A 三種屬性的就算是字串型態


變數屬性要怎麼查詢可以參考如下文章

Bash Shell | 如何使用內建指令 declare Command

1. 宣告一個整數型態的變數時,使用 declare -i 後面加上變數名稱,語法如下


declare -i name[=value]


範例:


#!/bin/sh


declare -i var0=10


declare -i var1

var1=20

# The value of var2 will be zero if the value is not a number

declare -i var2=A

declare -p var0 var1 var2


結果:


declare -i var0="10"

declare -i var1="20"
declare -i var2="0"

說明:


因為 var2 宣告為整數型態,當 var2 的變數值被指定為非數字時,var2 的變數值變成0(此範例是指定為字元'A'),宣告為整數型態的好處是,做算術運算時不需要使用算數擴展 $(( expression ))。


範例:


#!/bin/sh


var0=10

var1=${var0}+1
echo $var1

declare -i var2=10 var3

var3=${var2}+1
echo $var3

declare -p var0 var1 var2 var3


var1=$(( var0 + 1 ))

echo $var1

declare -p var1


結果:


$var1 = 10+1

$var3 = 11
declare -- var0="10"
declare -- var1="10+1"
declare -i var2="10"
declare -i var3="11"
$var1 = 11
declare -- var1="11"

說明:

1. var0 與 var1 宣告為字串,因此 var1=${var0}+1 被當作字串連接處理,var1 結果為字串 10+1。
2. var2 與 var3 宣告為整數,因此 var3=${var2}+1 被當做整數加法處理,var3 的結果為整數 11。

2. 宣告一個索引式陣列的變數時,主要有兩種方式,語法如下

第一種

name[subscript]=value

第二種

declare -a name[=(value1 value2 ...)]

範例:


#!/bin/sh


array1[0]=a

array1[1]=b
array1[2]=c

declare -a array2=(d e f)

declare -p array1 array2


for i in {0..2}

do
    echo \$array1[$i] = ${array1[$i]}
done

for i in {0..2}
do
    echo \$array2[$i] = ${array2[$i]}
done

結果:



declare -a array1='([0]="a" [1]="b" [2]="c")'

declare -a array2='([0]="d" [1]="e" [2]="f")'

$array1[0] = a
$array1[1] = b
$array1[2] = c
$array2[0] = d
$array2[1] = e
$array2[2] = f

3. 宣告一個關聯式陣列的變數時,使用 declare -A 後面加上變數名稱,語法如下

declare -A name[=([key1]=value1 [key2]=value2 ...)]

範例:


#!/bin/sh


declare -A score_array=([william]=100 [neo]=80 [tom]=90)


declare -p score_array


echo \$score_array[william] = ${score_array[william]}

echo \$score_array[neo] = ${score_array[neo]}
echo \$score_array[tom] = ${score_array[tom]}

結果:


declare -A score_array='([tom]="90" [neo]="80" [william]="100" )'

$score_array[william] = 100
$score_array[neo] = 80
$score_array[tom] = 90

4. 宣告一個字串變數時,主要有兩種方式,語法如下

第一種

str1=[value]

第二種

declare str2[=value]

範例:

#!/bin/sh

str1="I am str1"


declare str2="I am str2"


declare str3

str3="I am str3"

declare -p str1 str2 str3


echo \$str1 = $str1

echo \$str2 = $str2
echo \$str3 = $str3

結果:

declare -- str1="I am str1"
declare -- str2="I am str2"
declare -- str3="I am str3"
$str1 = I am str1
$str2 = I am str2
$str3 = I am str3

5. 宣告唯讀屬性的變數,使用 declare -r 語法如下

declare -r name

範例:

#!/bin/sh

declare -ri var0=10
declare -ra array1=(a b c)
declare -rA score_array=([william]=100 [neo]=80 [tom]=90)
declare -r  str1="I am str1"

var0=11
array1[0]=A
score_array[neo]=60
str1="read-only"

結果:(對個別參數做設定時的錯誤訊息如下)

./declare_ro.sh: line 8: var0: readonly variable
./declare_ro.sh: line 9: array1: readonly variable
./declare_ro.sh: line 10: score_array: readonly variable
./declare_ro.sh: line 11: str1: readonly variable

好站連結
 1. http://linux.vbird.org/linux_basic/0320bash.php#variable

沒有留言:

張貼留言