有規劃的bash變量組
一個變量:裏面存放多個變量,他們有各自的代號,但需要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變量組