shell 脚本中数组的总结

描述:

  变量是存储单个元素的内存空间,而数组是多个变量的集合,是一个连续的空间;但整个数组只能有

的名字。

  数组内的数据都有指定的索引,从而找到数组内所指定的数据。索引的编号是从0开始的,依次递增(0,1,2,3,…),这种方式叫数值索引。格式为:数组名[索引];${ARRAY_NAME[INDEX]}。索引也支持自定义的格式,也被称为关联索引,在bash4.0版本后开始支持。bash的数组也支持稀疏格式,即索引不连续(0,2,4,7,8,…)

用法:

1,使用数组需事先声明,格式如下:

  declare -a ARRAY_NAME  (声明索引数组)

  declare -A ARRAY_NAME  (声明关联数组)

2,数组中元素的赋值方式:

1),一次只赋值一个元素

 ARRAY_NAME[INDEX]=value

[root@localhost ~]# weekdays[0]="Sunday"
[root@localhost ~]# echo ${weekdays[0]}
Sunday

2),一次赋值全部元素:

 ARRAY_NAME=("VAL1" "VAL2" "VAL3"…)

[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" )
[root@localhost ~]# echo ${weekdays[6]}
Saturday
[root@localhost ~]# echo ${weekdays[5]}
Friday
[root@localhost ~]# echo ${weekdays[0]}   第一个元素的索引号是从0开始编号的
Sunday

3),只赋值特定元素

 ARRAY_NAME=([0]="VAL1" [3]="VAL4"…)

[root@localhost ~]# weekdays=([0]="Sunday" [2]="Tuesday" [5]="Saturday")
[root@localhost ~]# echo ${weekdays[0]}
Sunday
[root@localhost ~]# echo ${weekdays[2]}
Tuesday
[root@localhost ~]# echo ${weekdays[5]}
Saturday

4),read -a ARRAY_NAME

[root@localhost ~]# read -a number
123 456 789

3,数组的引用

引用数组中的元素:${ARRAY_NAME[INDEX]}

注意:引用时,只给数组名,表示引用下标为0的元素

   ${ARRY_NAME[*]}

   ${ARRY_NAME[@]}

数组的长度:(数组中元素的个数)

   ${#ARRY_NAME[*]}

   ${#ARRY_NAME[@]}

[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday")
[root@localhost ~]# echo ${weekdays[0]}
Sunday
[root@localhost ~]# echo ${weekdays[*]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${weekdays[@]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${#weekdays[@]}
3
[root@localhost ~]# echo ${#weekdays[*]}
3

示例:

1,随机生成10个数,并找出其中的最大值和最小值

[root@localhost ~]# cat sum.sh
#!/bin/bash
declare -a rand
declare -i max
declare -i min
for i in {0..9};do
    rand[$i]=$RANDOM
    echo ${rand[$i]}
    if [ $i -eq 0 ];then
     max=${rand[$i]}
     min=${rand[$i]}
    else
      [ "$max" -lt "${rand[$i]}" ] && max=${rand[$i]}
      [ "$min" -gt "${rand[$i]}" ] && min=${rand[$i]}
    fi
done
echo "MAX:$max"
echo "MIN:$min"
[root@localhost ~]# bash sum.sh
21586
1730
19008
16138
17576
3909
206
27706
3824
11997
MAX:27706
MIN:206

处理数组数据:

  语法

       描述

${!array[*]}

列出所有元素所对应的索引号
${!array[@]} 列出所有元素所对应的索引号
${array[*]} 列出关联数组的所有元素
${array[@]} 列出关联数组的所有元素
${#[array[*]} 关联数组的长度(元素个数)
${#[array[@]} 关联数组的长度(元素个数)

示例:

设置数组:

[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday")

1,列出数组中所有元素所对应的索引号

[root@localhost ~]# echo ${!weekdays[*]}
0 1 2
[root@localhost ~]# echo ${!weekdays[@]}
0 1 2

2,列出数组中所有的元素

[root@localhost ~]# echo ${weekdays[@]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${weekdays[*]}
Sunday Tuesday Saturda

3,显示数组中元素的个数

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

数组切片:

格式为:${ARRY_NAME[@]:offset:number}

       offset:要路过的元素的个数

       number:要取出的元素个数

     ${ARRAY_NAME[@]:offset}:取偏移量之后的所有元素

示例:

[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday")
[root@localhost ~]# echo ${weekdays[@]:3:2}
Wednesday Thursday
[root@localhost ~]# echo ${weekdays[@]:2}
Tuesday Wednesday Thursday Friday Saturday

向非稀疏格式数组中追加元素:

    ARRAY_NAME[${#ARRAY_NAME[*]}]=

[root@localhost ~]# number=(2 4 6 8)
[root@localhost ~]# echo ${number[*]}
2 4 6 8
[root@localhost ~]# number[${#number[*]}]=10
[root@localhost ~]# echo ${number[*]}
2 4 6 8 10

删除数组中的某元素:

    unset ARRAY[INDEX]

[root@localhost ~]# unset number[3]
[root@localhost ~]# echo ${number[*]}
2 4 6 10

关联数组

  declare -A ARRAY_NAME

  ARRAY_NAME=([index_name1]="value1" [index_name2]="value2"…)

[root@localhost ~]# declare -A num
[root@localhost ~]# num=([jishu]="1 3 5" [oushu]="2 4 6 8")
[root@localhost ~]# echo ${num[jishu]}
1 3 5
[root@localhost ~]# echo ${num[oushu]}
2 4 6 8

示例:

输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

[root@localhost ~]# cat maopao.sh
#!/bin/bash
#sorting following array
echo "Please input a number list: "
read -a arr
for ((i=0;i<${#arr[@]};i++));do
   for ((j=${#arr[@]}-1;j>i;j--));do
#echo $j
 if [[ ${arr[j]} -lt ${arr[j-1]} ]];then
    t=${arr[j]}
    arr[j]=${arr[j-1]}
    arr[j-1]=$t
 fi
    done
done 
echo "after sorting: "
echo ${arr[@]}
[root@localhost ~]# bash maopao.sh 
Please input a number list: 
5 1 4 2 3 0
after sorting: 
0 1 2 3 4 5

原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/41225

(1)
pingskypingsky
上一篇 2016-08-29 08:45
下一篇 2016-08-29 08:45

相关推荐

  • Linux基础之安全加密及CA、证书实战应用

    一、建立私有CA并让客户端申请请求,需要两台虚拟机完成 1、建立私有CA,生成私钥 2、CA公司给自己,生成自签证书 3、为CA提供所需要的目录及文件(如果事先存在,此步骤可以跳过) 二、CA公司已建立,需要一台客户机配合CA签署证书 1、客户端用到证书,因此生成私钥 2、客户端生成证书签署请求 3、将请求通过可靠方式发送给CA主机,这里作为测试,因此使用s…

    Linux干货 2016-10-04
  • DNS and Bind

    DNS and Bind ===================================================================================== 概述:    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使…

    Linux干货 2016-10-10
  • 进程和进程管理工具

    进程的相关定义以及相关工具的使用

    2017-12-17
  • 马哥教育网络班21期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@centos ~]# mke2fs -t ext4 -b 2048 -m 2&…

    Linux干货 2016-08-01
  • yum用法第一篇-简介及常见用法使用总结

    一、简介     yum( 全称为:Yellow dog Updater, Modified),是红帽(RedHat)家族(RedHat、Fedora、CentOS)中的前端shell的软件包管理器,主要基于对RPM包的管理,能够根据配置文件(类似于svn资源库配置文件)从指定的服务器自动下载RPM包进行安装,其最大的优势就是可…

    Linux干货 2015-09-22
  • Hadoop hdfs 分布式文件系统

    Hadoop简介:一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件…

    Linux干货 2017-04-19