Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19726157
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类:

2008-11-17 16:12:11

Linux shell 数组

磁针石

联系方式: gmail and gtalk: xurongzhong#gmail.com

 

参考资料

《学习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

阅读(29933) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~