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

  索引: 编号从0开始,属于数值索引
    注意:索引也可支持使用自定义的格式,而不仅仅是数值格式 

声明数组:
  declare -a ARRAY_NAME
  declare -A ARRAY_NAME: 关联数组,键值列表kv

数组元素的赋值:
  1.一次只赋值一个元素
    ARRAY_NAME[INDEX]=VALUE
      weekdays[0]="Sunday"
      weekdays[4]="Thursday"
  2. 一次赋值全部元素
    ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
  3.只赋值特定元素
    ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
  4. read -a ARRAY

引用数组元素:${ARRAY_NAME[INDEX]}
  注意: 省略[INDEX]表示引用下标为0的元素

#!/bin/bash
declare -a arr1 # 声明普通数组
declare -A arr2 # 声明关联数组 # 数组赋值
# 一次赋值一个元素
# arr1[]="Tom"
# arr1[]="Jerry" # 一次赋值全部元素
arr1=("Tom" "Jack" "Jerry" "slace") # 只赋值特定元素
# arr1=([]="Tom" []="Jerry" []="Jack") # 省略下标默认显示第0个元素
echo $arr1 # Tom # 数组长度
echo ${#arr1[*]} #
echo ${#arr1[@]} #

示例:生成10个随机数,并找出其最大值和最小值

#!/bin/bash
declare -i max=
declare -i min=
declare -a arr for i in {..};do
  arr[$i]=$RANDOM
  echo ${arr[$i]}
  if [ ${arr[$i]} -gt $max ]; then
    let max=arr[$i]
  else
    let min=arr[i]
  fi
done
echo "max is $max,min is $min"

练习: 写一个脚本: 定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件,要统计其下标为偶数的文件中的行数

#!/bin/bash
declare -a arr
declare -i sumlines= arr=(/var/log/*.log) for i in $(seq 0 1 $[${#arr[@]}-1]); do
  if [ $[$i%2] -eq 0 ]; then
    let sumlines+=`wc -l ${arr[$i]} | cut -d' ' -f1`
  fi
done echo "下标为偶数的文件中的行数为$sumlines行"

引用数组中的元素

  所有元素:${ARRAY[@], ${ARRAY[*]}}

  数组切片: ${ARRAY[@]:offset:number}
    offset:要跳过的元素个数
    number:要取出的元素个数,偏移量之后的所有元素: ${ARRAY[@]:offset}

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

向数组中追加元素:
  ARRAY[${#ARRAY[*]}]

删除数组中的某元素:
  unset ARRAY[INDEX]

关联数组:
  declare -A ARRAY_NAME
  ARRAY_NAME=([index_name1]='val1' [index_name2]='val2' ...)

          # 引用数组中的元素
# 引用数组中所有元素
echo ${arr1[@]}
echo ${arr1[*]} # 数组切片: ${arr1[@]:offset:number}
# 偏移两个元素取一位
echo ${arr1[*]::}
# 偏移几个元素后所有元素
echo ${arr1[@]:} # 向数组追加元素
arr1[${#arr1[@]}]="chengkaihua"
arr1[${#arr1[@]}]="alen"
echo ${arr1[@]} # 删除数组元素
unset arr1[]
echo ${arr1[@]} # 显示最后一位
echo ${arr1[$[${#arr1[*]}-]]} 结果显示:
Tom Jack Jerry slace
Tom Jack Jerry slace
Jerry
Jack Jerry slace
Tom Jack Jerry slace chengkaihua alen
Tom Jack slace chengkaihua alen
chengkaihua

练习:生成10个随机数,升序或降序排序
冒泡排序:

#!/bin/bash
declare -a arr
declare -i tmp= for i in {..};do
  arr[$i]=$RANDOM
done for ((i=;i<$[${#arr[*]}-];i++));do
  for ((j=;j<$[${#arr[*]}--$i];j++));do
    if [ ${arr[$j]} -gt ${arr[$[$j+]]} ];then
      let tmp=${arr[$j]}
      arr[$j]=${arr[$[$j+]]}
      arr[$[$j+]]=$tmp
    fi
  done
done
echo ${arr[@]}

shell编程(六)之数组的更多相关文章

  1. linux shell编程中的数组定义、遍历

    代码如下: 数组定义法1: arr=( ) # 注意是用空格分开,不是逗号!! 数组定义法2: array array[]="a" array[]="b" ar ...

  2. shell编程2:数组的运用

    Shell 数组 定义数组 在Shell中,用括号来表示数组,数组元素用"空格"符号分割开.定义数组的一般形式为: name=(name1 name2 name3) 复制代码 还可 ...

  3. 【shell】shell编程(六)-shell函数的应用

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; [return ...

  4. 【shell】shell编程(五)-读取参数

    通过前几篇文章的学习,我们学会了shell的基本语法.在linux的实际操作中,我们经常看到命令会有很多参数,例如:ls -al 等等,那么这个参数是怎么处理的呢? 接下来我们就来看看shell脚本对 ...

  5. [ SHELL编程 ] 数组、关联数组和awk数组

    本文主要对shell编程中常用的数组.关联数组和awk数组定义.操作以及注意事项做个总结,并提供具体案例. 数组 数组定义:一对圆括号表示数组,数组元素之间用空格符号分割. Array=(val1 v ...

  6. (转)轻松掌握shell编程中数组的常见用法及示例

    缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...

  7. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  8. shell编程系列4--有类型变量:字符串、只读类型、整数、数组

    shell编程系列4--有类型变量:字符串.只读类型.整数.数组 有类型变量总结: declare命令和typeset命令两者等价 declare.typeset命令都是用来定义变量类型的 decla ...

  9. Linux Shell编程(3):数组

    http://snailwarrior.blog.51cto.com/680306/154704 BASH只支持一维数组,但参数个数没有限制.   声明一个数组:declare -a array (其 ...

随机推荐

  1. Python的基本语法1

    一.python的基本数据类型 (1)6种基本数据类型 1.数字类型 int 整数,2,0,-4等 float 浮点数,如1.2,-0.3等 bool 布尔类型,True,False complex ...

  2. 微信小程序样式旋转

    相关文档:http://www.w3school.com.cn/cssref/pr_transform.asp index.wxss文件 注意:如果是web前端,要注意浏览器的兼容性 .x1{ wid ...

  3. levmar : Levenberg-Marquardt库编译

    levmar : Levenberg-Marquardt 是非线性优化的一个库 1.使用CMake生成sln项目,编译 clapack库 在levmar工程中,打开misc.c文件,在最开始添加#in ...

  4. PowerBI更新2019/04 - 解决方案架构 - PowerBI Solution Architecture(一图胜万字!)

    Power BI 架构图 (2019/04) 1) Power BI Desktop 是一个免费的工具.它可以用来准备和管理数据模型:包括链接各种数据:做数据清洗:定义关系:定义度量值和层级关系:应用 ...

  5. request.getParameterNames()和request.getParameterValues()

    request.getParameterNames()方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举. 通过Enu ...

  6. 来测试下你的Java编程能力

    上篇整理了下后面准备更系统化写的Java编程进阶的思路,如果仅看里面的词,很多同学会觉得都懂,但我真心觉得没有多少人是真懂的,所以简单的想了一些题目,感兴趣的同学们可以来做做看,看看自己的Java编程 ...

  7. python 使用 PIL 和 matplotlib 获取图片像素点处理之后再写入

    python 版本 3.x 首先安装 PIL 由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又 ...

  8. C++ 用三元组表示法存储稀疏矩阵

    若有一个矩阵(m*n),其中非0元素个数远少于数值为0的元素个数,若开辟一个m*n大空间,来存储这样一个很多元素值为0的矩阵,浪费空间,于是我们只存储这些非0的元素的下标及数值 用一个结构体——三元组 ...

  9. DS18B20初上电显示85℃问题

    以前用的温度采集都是用的AD,这次改为了DS18B20,看了资料,没有很复杂的部分,重要的就是时序.板子出来后初步测试也能正常读取温度,然而有个问题比较奇怪,就是在板子初上电时读取温度总是显示为+85 ...

  10. PyTorch常用代码段整理合集

    PyTorch常用代码段整理合集 转自:知乎 作者:张皓 众所周知,程序猿在写代码时通常会在网上搜索大量资料,其中大部分是代码段.然而,这项工作常常令人心累身疲,耗费大量时间.所以,今天小编转载了知乎 ...