1 数组的定义

1.1 普通数组

  1. 常规定义
num=(1 2 3)
num[3]=4;num[4]=5

或者

str1=('a' 'b' 'c')/str1=(a b c)
str2[0]=a
str2[1]='b'
str2[5]=d
str2[3]=c

备注:在使用形如str[0]=1定义数组是,数组的下标值可以不是连续的正整数,元素的顺序按照下标的升序排列,数组的长度由实际包含的元素个数决定,不受下标值的影响。echo ${str2[0]};echo ${str2[5]的值为a decho ${str[2]}的值为空。

  1. 特殊定义

    1. 在for循环中,也可以直接声明并使用数组
    for num in 1 2 3 4 5
    doecho "num is: ${num}"
    done
    1. 使用自定义的分隔符分割
    str="a,b,c"
    OLD_IFS="$IFS"
    IFS=","
    arr=($str)
    IFS="$OLD_IFS"`

    此时arr数组的值为a b c
    或者是:str="m,n";IFS=",";arr=($str),也能按照","对字符串进行分割。与上一条的区别是,上一条更改了IFS的默认值,之后又改了回去,但是第3条没有改回去。IFS的默认值为空格、teb或换行。详细的分析见:参考文章

1.2 关联数组

bash从4.0版本支持关联数组的使用,使用方式类似高级语言的Map数组。

  1. 声明关联数组
    declare -A user
  2. 定义数组
user[name]='jack'
user[age]=18

或者user=([name]='jack' [age]=18)
此时echo ${user[name]};echo ${user[age]}的结果是jack 18

  1. 备注

    1. 如果不声明数组为关联数组,user["name]="jack;user["sex"]="M",结果数组的长度为1,user["name"]的值会被user["sex"]的值覆盖。echo $user["name"];echo $user["sex"]的值为M M.
    2. 数字下标也支持字符型的。num["1"]="111"num[1]="111"是等效的,并且字符型数字做下标不会有上一条的现象,num["1"]=1;num["2"]=2;num["3"]=3,数组num的长度为3。

---

2. 数组的遍历

2.1 for循环

  1. 高级语言的形式
for((i=0;i<${#num[@]};i++))
doecho "num is: ${num[i]}"
done
  1. foreach形式
for nu in ${num[*]}
doecho "num is: $nu"
done

其中,${num[*]${num[@]效果相同

2.2 while

i=0
while [ $i -lt ${#num[@]} ]
doecho "num is: ${num[$i]}"echo "i is: $i"i=`expr $i + 1`
done 

备注:i的自增还可以使用i=$[$i+1]let "i+=1"i=$(($i+1))。具体的shell运算规则请参考xxx.

2.3 until

i=0
until [ $i -ge ${#num[*]} ]
doecho "num is: ${num[$i]}"i=`expr $i + 1`
done

2.4 对关联数组的遍历

  1. for循环遍历
for u in ${!user[@]}
doecho "user's ${u} is : ${user[$u]}
done

结果是:

user's name is : jack
user's age is : 18

备注:#{!user[@]}获取的是关联数组的所有下标值组成的数组

3. 数组增加元素

  1. 添加单个元素

    1. 添加元素到数组头
    num=(3 ${num[@]})

    此时num的值为3 1 2 3 4 5

    1. 添加元素到数组尾
    num=(${num[@]} 6)

    此时num的值为3 1 2 3 4 5 6
    或者使用下标添加:num[${#num[@]}]=7,此时num的值为3 1 2 3 4 5 6 7

  2. 添加其他数组到数组
    类似于添加单个元素

    1. 添加其他数组到数组头abc=(11 22 33);num=(${abc[@]} ${num[@]})
    2. 添加其他数组到数组尾num=(${num[@]} ${abc[@]})

4. 数组更新元素值

  1. 使用下标值更新数组
    num[0]=22222或者num[0]=${abc[2]}
  2. 用一个数组更新单个值
    num[1]=${abc[@]}
    此时num中的一个值被abc数组替换,相当于删除下标为1的值,并从下标1开始添加若干个元素。

    5. 数组删除元素值

    unset num[1]或者unset user[name]

    6. 删除数组

    unset num

转载于:https://www.cnblogs.com/donfaquir/p/9986157.html

shell中数组的使用相关推荐

  1. linux shell 中数组的定义和for循环遍历

    linux shell中的语法和普通编程语言 c/c++  java 的不太一样,平时用的不多,所以总是记不住,写脚本才会去查怎么用.今天突然被问到数组怎么去遍历.平时写shell脚本也经常遍历数组, ...

  2. shell中数组遍历替换切换等

    目录 一.数组 (一)定义方法 (二)数据类型 (三)获取数组长度 (四)获取数据列表 (五)读取某下标赋值 二.数组遍历 三.数组切片 四.数组替换 五.数组删除 六.数组追加元素 七.向函数传数组 ...

  3. shell中数组基础语法

    数组的基本赋值 arr=(a b c) arr[index]=a 2.常用的两个方法 str=${arr[@]}(数组转化成字符串) len=${#arr[*]}(数组长度) 3.遍历数组的方法 #! ...

  4. linux shell之数组

    数组的定义 何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念).那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是 ...

  5. linux shell中的各种括号的使用方法

    在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var}  2.$(cmd)  3.()和{}  4.${var:-string},${var:+str ...

  6. shell中的各种括号的使用方法

    from:http://www.jb51.net/article/60326.htm 在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var}  2.$ ...

  7. shell oracle查询数组,shell 脚本 ---数组

    数组的定义:所谓数组,就是相同数据类型的元素按一定顺序的集合,就是把有限个类型相同的变量用一个名字命令,也就是说这些变量被定义成数组之后,它们就不在有自己的名字了,那么我们怎么找到各个变量或者元素呢? ...

  8. shell编程-数组的使用

    一.简介 数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小.与大部分编程语言类似,数组元素的下标由 0 开始. Shell 数组用括号来表示,元 ...

  9. shell中的函数shell中的数组告警系统需求分析

    2019独角兽企业重金招聘Python工程师标准>>> 20.16/20.17 shell中的函数 函数的概念 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用 ...

  10. Linux shell 中的数组和关联数组

    写在前面的话 我用开始废柴了,这个又是写给我自己看的了. 普通数组 1.数组的定义 在Linux shell中定义一个普通的数组很简单,首先我们先给数组命名(当然要符合所有的命名规则咯).定义数组的一 ...

最新文章

  1. Permission is only granted to system app
  2. MySQL 在 LIMIT 条件后注入
  3. 如果从Silverlight 读取本地GB2312格式的xml文件
  4. PyTorch模型读写、参数初始化、Finetune
  5. cdh sqoop 配置_相比于手动搭建集群,使用Ambari或者CDH的必要性
  6. PHP 数组的内部实现
  7. CSS尺寸和字体单位-em、px还是%
  8. 一图理解M0不同优先级中断及Pendsv切换
  9. 末日帝国——Agile公司的困境
  10. NSCT(Nonsubsampled Contourlet变换)
  11. windows无法完成格式化U盘与U盘修复对几种解决方法
  12. Android应用程序四大组件分别是什么?各个组件所起到的作用是什么?
  13. springboot中.yml 用jasypt 密码加密
  14. IDEA中Maven中mysql-connector-java或者其他依赖包下载不了的问题的解决办法
  15. 问题解决:Unable to establish SSL connection.
  16. 荒野大镖客2无法连接远程计算机,荒野大镖客2pc版常见问题解决办法_常见问题解决方法汇总...
  17. 正点原子DS100手持示波器测试记录
  18. SugarCRM源码分析之缓存
  19. 80端口被占用的解决办法
  20. ZYNQ之AXI简介

热门文章

  1. 写得蛮好的linux学习笔记[转]
  2. inDesign入门教程,如何对齐和分组内容?
  3. ios开发之获取版本号,部分设备信息
  4. Topaz DeNoise AI 3.6.2 for Mac(图片降噪软件)
  5. 苹果电脑屏幕刷新率如何调整
  6. Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)
  7. nginx安装lua/replace-filter-nginx-module
  8. iOS-深复制(mutableCopy)与浅复制(copy)
  9. 【BZOJ 1026】 [SCOI2009]windy数
  10. HDU 4762 Cut the Cake