1. 程式人生 > >有規劃的bash變量組

有規劃的bash變量組

linux組變量

什麽是數組?

一個變量:裏面存放多個變量,他們有各自的代號,但需要user自行定義數組元素的代號:

索引代號:將數組裏面的元素由【0,1,2....n】來標識

關聯代號:用戶自定義的字符串來標識,只有bash4.0以上版本支持(本機不是所以無法測試)

數組的定義和引用:

定義數組:VAR=(value1 value2 value3 value4) 直接定義數組元素內容,系統會自動給予標識

引用數組

[root@localhost ~]# var1=(1 2 3 4 5 6)
[root@localhost ~]# echo "${var1[1]}"
2
[root@localhost ~]# echo "${var1[0]}"
1
[root@localhost ~]# echo "${var1[5]}"
6

註意:數組元素之間拿空格隔開

註意:引用數組時,加${} ,[]:裏面的內容是標識符

VAR1=([0]="value1" [2]="value2" [4]="value3") 定義時連同標識一起定義,沒由定義的標識其元素內容默認為空值

[root@localhost ~]# VAR1=([0]=value1 [2]=value2 [3]=value3)
[root@localhost ~]# echo "${VAR1[0]}"
value1
[root@localhost ~]# echo "${VAR1[2]}"
value2
[root@localhost ~]# echo "${VAR1[3]}"
value3
[root@localhost ~]# echo "${VAR1[1]}"

其他定義方法

declare命令

-a to make NAMEs indexed arrays (if supported)

將其後的變量名稱聲明為索引數組,如果支持

-A to make NAMEs associative arrays (if supported)

將其後的變量名聲明為關聯數組,如果支持

分別定義法

WC_NAME[0]="VALUE1"

WC_NAME[1]="VALUE2"

WC_NAME[3]="VALUE4"

[root@localhost ~]#    WC_NAME[0]="VALUE1"
[root@localhost ~]#      WC_NAME[1]="VALUE2"
[root@localhost ~]#      WC_NAME[3]="VALUE4"
[root@localhost ~]# echo "${WC_NAME[0]}"
VALUE1
[root@localhost ~]# echo "${WC_NAME[2]}"

引用整個數組中的所有元素:

${NAME[*]} 或者${NAME[@]}

[root@localhost ~]# echo "${WC_NAME[*]}"
VALUE1 VALUE2 VALUE4

引用整個數組的所有元素的索引號

${!NAME[*]} 或者${!NAME[@]}

[root@localhost ~]# echo "${!WC_NAME[*]}"
0 1 3

查看數組中的元素的個數

${#NAME[*]} 或者${#NAME[@]}

[root@localhost ~]# echo "${#WC_NAME[*]}"
3


數組切片:

${NAME[*]:offset}

//顯示包括offset數值(索引標識)所對應表示位置的元素及其後所有的元素

[root@localhost ~]# echo "${WC_NAME[*]:1}"
VALUE2 VALUE4

${NAME[*]:offset:number}

//顯示包括offset數值所對應表示位置的元素及其後共number個數的值

[root@localhost ~]# echo "${WC_NAME[*]:0:1}"
VALUE1
[root@localhost ~]# echo "${WC_NAME[*]:1:1}"
VALUE2

撤銷數組:

unset NAME

----------------------------------------------------------------------------------------------

腳本中與用戶交互的變量


位置參數變量:

$0:命令的本身,對於腳本而言,就是腳本的路徑

$1,$2,...$N;腳本後面通過命令行給腳本傳遞的命令行參數

N>9時,引用該位置變量需要加{}即${10}


特殊變量:

$@:給出的所有位置參數的列表,當使用雙引號引用時,每個參數作為單獨的字符串存在

[root@localhost ~]# for i in "${WC_NAME[@]}";do echo "$i"; done
VALUE1
VALUE2
VALUE4

$*:給出的所有位置參數的列表,當使用雙引號引用時,整個參數列表被當做一個字符串

[root@localhost ~]# for i in "${WC_NAME[*]}";do echo "$i"; done
VALUE1 VALUE2 VALUE4

$#:表示除了$0,外,腳本裏參數的個數

如:我們編寫一個求任意倆個整數之間奇數和偶數和的腳本

#!/bin/bash

#

if [ $# -ne 2 ];then

echo "Must input two parameter"

exit 6

else

inter1=$1

inter2=$2

sum1=0

sum2=0

if [[ "$inter1" =~ [^[:digit:]] ]] || [[ "$inter2" =~ [^[:digit:]] ]];then

echo "They shoud be integers"

else

if [ $inter1 -gt $inter2 ];then

exchange=$inter1

inter1=$inter2

inter2=$exchange

fi

judgment=$[inter1%2]

for i in $(seq $inter1 2 $inter2);do

sum1=$[sum1+i]

done

for j in $(seq $[inter1+1] 2 $inter2);do

sum2=$[sum2+j]

done

if [ $judgment -eq 1 ];then

echo -e "奇數和 : $sum1\n偶數和 : $sum2"

else

echo -e "奇數和 : $sum2\n偶數和 : $sum1"

fi

fi

fi

[root@localhost ~]# bash sum1 1 9
奇數和 : 25
偶數和 : 20

其中 數字1 和 9 分別是腳本中的 $1 和 $2

有規劃的bash變量組