bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。shell 下的多维数组是可以通过1维数组组合的,本篇也会在后面提到多维数据。

一、定义数组

在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:

array=(value1 value2 ...... valueN) #从下标0开始依次赋值

array=([1]=value1 [2]=value2 [0]=value0) #指定下标赋值

declare -a array=(value1 value2 ...... valueN) #声明+赋值,也可以只声明

unixtype=('Debian' 'Red Hat' 'Fedora') #如果元素有空格,就要用引号

set| grep array #利用set查看数组赋值情况

除此之外也可以通过read的交互的方式定义数组。如下:

# read -a array #-a表示从标准输入读入数组,遇到换行为止

1 2 3 4 5

# echo "${array[@]}"

1 2 3 4 5

可以通过如下方法清除数组:

unset array #清除数组

unset array[1] #清除数组的指定元素

示例:

unixtype=('Debian' 'Red Hat' 'Fedora')

各值单独定义

NAME[0]="Zara"

NAME[1]="Qadir"

NAME[2]="Mahnaz"

二、数组变量

现网应用中经常需要获取元素的个数、下标值的情况,shell本身也提供了获取的方法。# 取得数组元素的个数

length=${#array_name[@]}

# 或者

length=${#array_name[*]}

# 取得数组单个元素的长度

lengthn=${#array_name[n]}

#取得数组下标的值

${!array[@]}

#从数组的n位置开始取m个元素

${array[@]:n:m}

示例如下:

[root@localhost ~]# unixtype=('Debian' 'Red Hat' 'Fedora')

[root@localhost ~]# echo ${#unixtype[@]}

3

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

3

[root@localhost ~]# echo ${#unixtype[1]}

7

[root@localhost ~]# echo ${!unixtype[@]}

0 1 2

[root@localhost ~]# echo ${!unixtype[2]}

--> 无结果输出

[root@localhost ~]# echo ${unixtype[@]:1:2}

Red Hat Fedora

[root@localhost ~]# echo ${unixtype[@]:1:3}

Red Hat Fedora

注意${array[@]:n:m}的用法,后面的m当大于可取的范围时,是不会报错的。

三、数组的常用操作

1、命令执行结果放入数组

[root@361way ~]# array=($(ls | grep '.sh'))

[root@361way ~]# array=(`ls | grep '.sh'`)

[root@361way ~]# echo ${array[@]}

11.sh a.sh b.sh del_log.sh getcoreinfo.sh ntp.sh read.sh rrs.sh script.sh

2、读入字符串,给数组赋值

i=0

n=5

while [ "$i" -lt $n ] ; do #遍历5个输入

echo "Please input strings ... `expr $i + 1`"

read array[$i] #数组赋值

b=${array[$i]}

echo "$b"

i=`expr $i + 1` #i递增

done

3、字符串的字母逐个放入数组并输出

# cat a2.sh

chars='abcdefghijklmnopqrstuvwxyz'

i=0

while [ $i -lt ${#chars} ] ; do # ${#char}是字符串长度

#echo ${chars:$i:1} $i

array[$i]=${chars:$i:1} #从$i取1个字节

echo ${array[@]} $i

#echo ${array[$i]} $i

i=`expr $i + 1`

done

执行测试的时候,可以试下将echo ${array[@]} 换做echo $array ,会发现输出会有不同的,默认echo $arry 输出的是下第一个元素,即下标为0的值。这点是和python里的数组不一样的。

4、判断一个变量是否在数组中

一个很简洁的写法是:

echo ${array[@]} | grep -wq "${member}"

if [ $? -eq $SUCCESS ];then

但是这会带来一个问题,如果array的元素里面带有空格,就会误认为是一个元素,因此遍历比较是更稳妥的选择。

for i in ${array[@]};do

if [ "$i" = "${member}" ];then

....

fi

done

5、构建二维数组

a=('1 2 3' '4 5 6' '7 8 9') #赋值,每个元素中都有空格

for i in ${a[@]} ; do

b=($i) #赋值给b,这样b也是一个数组

for j in ${b[@]};do #相当于对二元数组操作

......

done

done

6、文件内容读入数组

# cat /etc/shells | tr "\n" " " >/tmp/tmp.file #回车变空格

# read -a array < /tmp/tmp.file #读入数组

# set| grep array

array=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/dash")

linux数组shell数组添加内容,shell数组的定义与应用相关推荐

  1. linux在指定行添加内容,linux下利用shell在指定的行添加内容的方法

    linux下利用shell在指定的行添加内容的方法 在linux的一些配置中总会要进行某个文件中的某行的操作,进行增加,修改,删除等操作. 而这里主要是进行的是指定的行添加数据的操作: 脚本如下: s ...

  2. 19号以后包括数组在内的所有内容(数组、函数、方法、dom操作)

    数组: 1.数组就是许多变量,他们的名称和数据类型都是一致的. 数组元素:就是数组里面的每一项 2.数组下标: 数组的下标是0的元素是数组的第一个元素(数组的下标是从0开始的). 3.获取数组的长度: ...

  3. java添加字符串数组_java – 如何将字符串数组的元素添加到字符串数组列表?...

    你已经有了内置的方法: – List species = Arrays.asList(speciesArr); 注意: – 您应该使用List< String>不是ArrayList< ...

  4. linux判断两个文件内容,shell怎么判断两个文件内容是否相同

    #cat diff_two_file #/bin/sbin file1=/mnt/mmc/test/aa file2=/mnt/mmc/test/bb diff $file1 $file2 > ...

  5. linux shell 编辑文件内容,Shell编辑与文本处理(Bash sed文本编辑)

    释放双眼,带上耳机,听听看~! 1 sed 命令格式 sed 的全称是 stream editor,也就是流编辑器.其作用便是将文本文件或来自于管道符传入的输入流做文本的处理,如替换.增加内容.删除内 ...

  6. 将数组A中的内容和数组B中的内容进行交换(数组一样大)

    #include <stdio.h>int main() {int arr1[10]={1,2,3,4,5,11,14,16,17,12};int arr2[10]={0,6,7,8,9, ...

  7. JavaScript 常用数组方法及使用技巧「数组的力量隐藏在数组方法中,必收藏」

    JavaScript 数组的力量隐藏在数组方法中. 没错!如果你只知道用数组,但是不知道数组的这些方法怎么用,那么你就不是真正的懂他. 正餐开始,来看看 JavaScript 中有哪些常用的数组方法! ...

  8. 细说PHP笔记03(第7章)--数组与数据结构,数组定义,数组遍历,数组内部指针遍历,键值操作函数,统计数组函数,回调函数处理数组元素,数组排序,拆分、合并、分解、结合数组,数组实现堆栈,随机选取元素

    1.数组 索引数组:索引值是整数 关联数组:索引值是字符串 2.数组的定义 1.以直接赋值的方式声明 $数组名[下标]=资料内容 或 $数组名[关联字符串(键值)]=资料内容 <?php $va ...

  9. 数组 Array (全世界最详细的数组解释)

    数组 Array,可以用来将多条数据通过 [] 包裹起来组成一个整体. 例如: \1. var arr = [100, 'hello', true, 200]; 说明: · 元素(数组项):数组中的每 ...

最新文章

  1. 虽被BERT碾压,但还是有必要谈谈BERT时代与后时代的NLP
  2. 目标检测别再刷榜了,让流感知来展示真正的技术!ECCV 2020 最佳论文提名
  3. 2019年,人工智能要落地,更要小心被“摔死”
  4. 北恒生物获德诚资本约1亿元A轮融资,德诚资本投资
  5. alert中添加表格_Excel设置表格边框的几种方法,还有自动添加边框哟
  6. linux下批量修改文件名的方法
  7. c语言不同类型指针间的强转,C语言中不同的结构体类型的指针间的强制转换详解...
  8. 超经典解释什么叫网关
  9. Win Form登录机制的实现
  10. TCP/IP 三次握手
  11. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨4.73%
  12. 一次比较麻烦的性能问题诊断及解决
  13. C语言基础选择题100道(附答案)01
  14. 重装win10提示在EFI系统上,Windows只能安装到GPT磁盘
  15. QCC305x系列开发教程(入门篇)之1.3-烧录方式使用USB时的驱动安装及其出现“未知设备”的解决方法
  16. excel中条形图的条目排序与逆序
  17. Java--Spring入门
  18. 离群值 excel_如何(以及为什么)在Excel中使用离群值函数
  19. 歪理邪说解析架构设计师上午考试试题之一(分析2010下半年系统架构设计师上午试题01-05题)
  20. (项目)在线教育平台(十三)

热门文章

  1. Springboot 抛出Failed to determine a suitable driver class异常原因
  2. PHP 中提示undefined index如何解决(多种方法)
  3. 解决Parameter ‘__frch_item_0‘ not found. Available parameters 问题
  4. Python 中文注释报错解决方法
  5. 我可以直接从GitHub运行HTML文件,而不仅仅是查看它们的来源吗?
  6. 手把手教你实现一个 Vue 进度条组件!
  7. spring事务介绍
  8. 50年前就已讨论的数据中心隐私问题
  9. 《python 与数据挖掘 》一1.3 Python开发环境的搭建
  10. 分布式存储的三个基本问题