shell之數組定義

原文地址:

參考資料

《學習bash shell  3 版》6.4. Arrays

Bash 中還可以使用數組變量 , 其賦值有兩種 :
(1) name = (value1 ... valuen) 
此時下標從 0 開始,也可以: names=([2]=alice  [0]=hatter [1]=duchess)
(2) name[index] = value


數組可以使用 declare –a 來顯示聲明, 數組下標的範圍沒有任何限制 , 同時也不必使用連續的分量。可以通過 ${ array [i ]}. 訪問數組中的元素。如果不指定元素,則表示第一個元素。 @  * 相同,但是使用時加引號,並在引號中返回每個參數, * 則作爲一個整體的字符串返回。

 

# A=(a b c def)

# echo ${A[@]}

a b c def

# echo ${A}  

a

echo ${A[*]}

a b c def

for i in "${A[@]}"; do

     echo $i

done

顯示的結果:

a

b

c

def

 

for i in "${A[*]}"; do

     echo $i

done

顯示結果:

a b c def

 

顯示目前有值的數組序號:―― bash 3.0 以後才支持。

# echo ${!A[@]}

0 1 2 3

// 取得數組元素的個數

# echo ${#A[@]}

4

顯示第 3 個元素裏面的元素的個數:

echo ${#A[3]}

3

echo ${#A[2]}

1

 

// 清除變量
$ unset A
$ echo ${A[@]}
$

A=B 
B=C 
unset $A 
事實上所取消的變量是   B  而不是   A

 

// 清空變量 , 即將值變爲空
$ A=
$ echo ${A[@]}
$

 

 

#!/bin/bash

     for i in $(cut -f 1,3 -d: /etc/passwd) ; do

         echo $i

         array[${i#*:}]=${i%:*}

     done

echo "User ID $1 is ${array[$1]}."

echo "There are currently ${#array[@]} user accounts on the system."

 

 

 

shell 實現的選擇排序

# vi test2

#!/bin/bash

 

     values=(39 5 36 12 9 3 2 30 4 18 22 1 28 25)

     numvalues=${#values[@]}

     for (( i=0; i < numvalues; i++ )); do

         lowest=$i

         for (( j=i+1; j < numvalues; j++ )); do

             if [ ${values[j]} -le ${values[$lowest]} ]; then

                 lowest=$j

             fi

         done

         temp=${values[i]}

         values[i]=${values[lowest]}

         values[lowest]=$temp

     done

     for (( i=0; i < numvalues; i++ )); do

         echo -ne "${values[$i]}/t"

     done

echo -e "/n/n-------end---------/n"

 

環境變量 DIRSTACK 就是使用數組實現的。其他還有BASH_VERSINFO     PIPESTATUS

 

 

字符串轉數組

str="12 34 56"

arr=($str)

count=${#arr[@]}

for (( i=0;i<count;i=i+1))

do

     echo "$i=arr[$i]"

done

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章