shell之数组定义

  • Post author:
  • Post category:其他






原文地址:




参考资料





《学习

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