变量:存储单个元素的内存空间。

数组:存储多个元素的连续的内存空间。

  数组名:整个数组只有一个名字;

  数组索引:编号从0开始;

    数组名[索引];

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

      注意:引用变量值必须加上花括号{ }。

声明数组:

  declare -a ARRAY_NAME:声明索引数组。

  declare -A ARRAY_NAME:声明关联数组。

数组中元素的赋值方式:

  (1)一次只赋值一个元素;

    ARRAY_NAME[INDEX]=value

  (2)一次赋值全部元素;

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

     注意: 元素与元素之间使用空格字符隔开

  (3)只赋值特定元素;这种称之为稀疏格式的数组。

    ARRAY_NAME=([0]="VAL1"  [3]="VAL3"  ........)

  (4)read也可以给数组赋值

    read -a ARRAY_NAME

演示:

如何引用数组?

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

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

引用数组中的所有元素:${ARRAY_NAME[*]}或者${ARRAY_NAME[@]}

求数组的长度(数组中元素的个数):${#ARRAY_NAME[@]}或者${#ARRAY_NAME[*]}

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

#!/bin/bash
#
declare -a rand
declare -i max=
for i in {..};do
rand[$i]=$RANDOM
echo "rand[$i]: ${rand[$i]}"
[ ${rand[$i]} -gt $max ] && max=${rand[$i]}
done
echo "max: $max"

查看一下结果:

案例2:定义一个数组,数组中的元素是var/log/目录下所有以.log结尾的文件的名称;统计其下标为偶数的文件中的行数之和;

[root@ELK-chaofeng test]# cat test10.log
#!/bin/bash
declare -a files
files=(/var/log/*.log) declare -i lines=0 for i in $(seq 0 $[${#files[@]}-1]);do
if [ $[$i%2] -eq 0 ];then
let lines+=$(wc -l ${files[$i]} | cut -d' ' -f1)
fi
done
echo "Lines: $lines"
[root@ELK-chaofeng test]#

查看一下结果:

数组元素切片:${ARRAY_NAME[@]:offset:number}

  offset:要路过的元素个数;

  number:要取出的元素个数,省略number时,表示取偏移量之后的所有元素;

演示:

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

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

删除数组中的某元素:

  unset ARRAY_NAME[INDEX]

关联数组:

  declare -A ARRAY_NAME

    ARRAY_NAME=([index_name1]="value1"  [index_name1]="value2"  .....)

shell脚本之数组的更多相关文章

  1. Shell脚本学习-数组

    跟着RUNOOB网站的教程学习的笔记 Shell数组 数组中可以存放多个值,Bash Shell只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与PHP类似). 与大部分编程语言类似,数 ...

  2. shell脚本中数组array常用技巧学习实践

    shell中数组的下标默认是从0开始的 1.将字符串放在数组中,获取其长度 #!/bin/bashstr="a b --n d"array=($str)length=${#arra ...

  3. Linux Shell脚本编程-数组和字符串处理

    数组  1.数组的定义及声明 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名:整个数组只有一个名字 索引:编号从0开始,属于数值索引:bash的数组支持 ...

  4. shell脚本编程数组

    数组: 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为 ...

  5. Shell脚本(四)数组

    平时写脚本还没有用到过数组,暂时先记录下用法. #!/bin/bash array1=( ) array1_length=${#array1[@]} echo "array1 length: ...

  6. Linux 命令详解(十)Shell脚本的数组详解

    1.数组定义 [root@bastion-IDC ~]# a=( ) [root@bastion-IDC ~]# echo $a 一对括号表示是数组,数组元素用“空格”符号分割开. 2.数组读取与赋值 ...

  7. Linux shell脚本中 数组的声明:

    数组的声明: 1)array[key]=value # array[0]=one,array[1]=two 复制代码 2)declare -a array # array被当作数组名 复制代码 3)a ...

  8. shell 脚本获取数组字符串长度

    #!/bin/sh source /etc/init.d/functions funOne() { array=(I am dfh kjlhfjksdf sdfj jdkfhaskl mjjoldfu ...

  9. shell脚本之数组基本操作及排序

    数组的基本操作及排序 1.数组定义方法: ( 6 7 9 4 3 2) 0 1 2 3 4 5 #下标号 方法一: 数组名=(value0 value1 value2 -) 方法二: 数组名=([0] ...

随机推荐

  1. Hadoop社区版搭建

    1.环境准备 1.1 硬件配置 设备名 参数 数量 6台 系统 centos6.5 内存 64G 硬盘 32T/台 CPU 16核/台 1.2 软件版本 Hadoop-2.x 下载地址 JDK1.7  ...

  2. 使用 redis-dump 批量导入导出数据

    有时候需要将 redis 的数据进行导入导出操作,可以使用 redis-dump 这款工具. 一.安装RVM redis-dump 工具依赖于2.2以上版本的 ruby,而 centos 环境下 yu ...

  3. Apache Flume 1.7.0 源码编译 导入Eclipse

    前言 最近看了看Apache Flume,在虚拟机里跑了一下flume + kafka + storm + mysql架构的demo,功能很简单,主要是用flume收集数据源(http上报信息),放入 ...

  4. TCP/IP 笔记 - 广播和本地组播

    在之前第二章介绍IP寻址的时候有介绍到,IP地址有4种:单播.组播.广播.任播. 单播,客户端与服务器之间点到点连接通信: 组播,在发送者和多个接收者(如某个特定的分组)之间实现点对多点的连接通信: ...

  5. python argparse(参数解析模块)

    这是一个参数解析,可以用它快捷的为你的程序生成参数相关功能 import argparse(导入程序参数模块) # 创建argparse对象,并将产品简要说明加入show = '程序说明' ===&g ...

  6. 深入浅出 JVM GC(1)

    # 前言 初级 Java 程序员步入中级程序员的有一个无法绕过的阶段------GC(Garbage Collection).作为 Java 程序员,说实话,很幸福,不用像 C 程序员那样,时刻关心着 ...

  7. JavaScript之使用AJAX(适合初学者)

      网上关于AJAX的教程和分享层出不穷,现实生活中关于AJAX的书籍也是琳琅满目,然而太多的选择容易令人眼花缭乱,不好取舍.事实是,一般的教程或书籍都不会讲Web服务器的搭建,因此,对于初学者(比如 ...

  8. Bootstrap学习记录-1.Navigation

    Bootstrap中的导航栏功能需要添加bootstrap.css.jquery.js.bootstrap.js,其中,jquery.js文件是bootstrap.js文件中必须的,否则就会抛出异常信 ...

  9. session持久化到sqlserver

    每次想使用都会忘记单词,所幸记录下来.简单步骤记录. 第一步:找到cmd目录 输入:cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 进入该目录. 第二 ...

  10. [android] soundpool简介

    主要的应用场景是游戏开发的时候,声音都比较短,比较密集,使用这个api来实现 池:实现了一个链表,旧的资源不会被释放掉,而是存起来,等用的时候,重新使用 不会创建过多的对象 在res资源目录里面创建一 ...