1.数组的概念

shell数组就是一个元素集合,它把有限个元素用一个名字来命名,然后用编号对他们分区。这个名字称为数组名,用于区分不同内容的编号称为数组的下标。

数组的设计其实就是为了处理方便,把具有相同类型的若干变量按有序的形势组织起来的一种形势,以减少重复频繁的单独定义。

2.数组的定义

# 语法:array=(value value1 value3 ...)# 实例:array=(1 2 3)

或者

# 语法:array=([key1]=value1 [key2]=value2 ...)# 实例:array=([3]='A' [9]='B' [6]='C')

再或者

arr1[0]=value
arr1[1]=value1
arr1[2]=value2

还可以使用动态命令定义数组

arr2=($(ls /))

3.数组的读取

注意:数组的元素下标是从0开始的

echo ${QINYS[0]} 引用第一个数组变量,结果打印test1;

echo ${QINYS[1]} 引用第二个数组变量;

echo ${QINYS[@]} 显示该数组所有参数;

echo ${#QINYS[@]} 显示该数组参数个数,也可以使用echo ${#QINYS[*]} ;

echo ${#QINYS[0]} 显示test1字符长度;

echo ${QINYS[@]:0} 打印数组所有的值;

echo ${QINYS[@]:1} 打印从第二个值开始的所有值;

echo ${QINYS[@]:0:2} 打印从第一个值与第二个值;

echo ${QINYS[@]:1:2} 打印从第二个值与第三个值。

4.数组的增删

4.1 增加或覆盖

“数组名[下标]”对数组进行引用赋值,如果存在,则覆盖,不存在则新增

例如:arr3[4]=5 表示数组arr3中没有第4个元素,则新增,有则覆盖元素

4.2 删除

使用命令unset删除

示例:unset arr3[0]

删除整个数组

示例:unset arr3

3、shell数组脚本案例

3.1.循环打印数组元素

#!/bin/bash
array=(1 2 3)
for((i=0;i<${#array[@]};i++))
do
echo ${array[i]}
done

输出结果:

2.通过普通for循环语句打印数组元素

#!/bin/bash
array=(1 2 3)
for i in ${array[@]}
do
echo $i
done

输出结果:

3.通过while循环打印数组

#!/bin/bash
array=(1 2 3)
i=0
while((i<${#array[@]}))
do
echo ${array[i]}
((i++))
done

输出结果与上述相同

4.竖向定义数组并批量打印

#!/bin/bash
arr_ip=(
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5) #循环打印数组
for((i=0;i<${#arr_ip[@]};i++))
do
echo "The num is $i,the ip is ${arr_ip[i]}"
done
echo "---------------------"
echo "ayy_ip length is :${#arr_ip[@]}"

输出结果:

4、现实案例

需求:利用bash打印出下面这句话中大于等于5个字母的单词

my favourite subject is English . and i like sports very much

方法一:

#!/bin/bash
arr=(my favourite subject is English . and i like sports very much)
for((i=0;i<${#arr[@]};i++))
do
if [ ${#arr[i]} -gt 5 ]
then
echo "${arr[i]}"
fi
done
echo '----------------------'
for word in ${arr[*]}
do
if [ `expr length $word` -gt 5 ];
then
echo $word
fi
done

输出结果:

方法2:使用awk打印

Linux:/qinys/data # chr="my favourite subject is English . and i like sports very much"

Linux:/qinys/data # echo  $chr|awk '{for(i=0;i<=NF;i++) if(length($i)>5) print $i}'

my favourite subject is English . and i like sports very much

favourite

subject

English

sports

【Linux】shell数组的更多相关文章

  1. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  2. 转:linux shell 数组建立及使用技巧

    linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  3. 转载-Linux Shell 数组建立及使用技巧

    转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html 如侵犯版权,请联系我删除 linux shell在编程方面比win ...

  4. linux shell 数组建立及使用技巧

    参考网址:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html linux shell在编程方面比windows 批处理强大太多 ...

  5. linux shell 数组的使用

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  6. Linux Shell 数组

    shell 数组一般都是一维数组. 1. 数组的声明 declare -a arr 该命令将声明一个数组arr,实际上不声明也可以直接定义数组. 2. 数组的初始化 arr=(1 2 3):该命令定义 ...

  7. linux shell数组

    from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...

  8. linux shell数组赋值方法(常用)

    http://blog.csdn.net/shaobingj126/article/details/7395161 Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... ...

  9. Linux shell —— 数组与关联数组

    使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ declare -A fruits_price $ fruits_ ...

  10. Linux shell之数组

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

随机推荐

  1. 安卓开发环境配置及HelloWorld

    一:JAVA 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.1 ...

  2. mongodb分布式集群搭建手记

    一.架构简介 目标单机搭建mongodb分布式集群(副本集 + 分片集群),演示mongodb分布式集群的安装部署.简单操作. 说明在同一个vm启动由两个分片组成的分布式集群,每个分片都是一个PSS( ...

  3. 28个HTML5特征、窍门和技术

    原文地址:  http://www.zhangxinxu.com/wordpress/2010/08/%E7%BF%BB%E8%AF%91-%E4%BD%A0%E5%BF%85%E9%A1%BB%E7 ...

  4. emouse思·睿—评论与观点整理之五

    虽说我主要做的硬件,平时的兴趣爱好比较关注移动互联网,混迹于虎嗅.爱范儿.雷锋网.36Kr.cnBeta.瘾科技.i黑马.TechWeb等这类科技以及创业媒体,遗憾的是系统的去写的并不多,好在还算充分 ...

  5. Swift3.0:照片选择

    一.介绍 图片选择或者拍照功能: 1.选择相册中的图片或是拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.presentViewController ...

  6. Ios开发之Category

    Category是在不改变已存在类的情况下,对其添加方法来达到对类进行功能扩展的目的. 对类功能进行拓展的时候,我们会有多种方式,比如说可以通过继承也可以进行功能扩展,但是在Category和继承上我 ...

  7. 【转载】springboot:如何优雅的使用mybatis

    这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis.到网上找了一下关于spring boot ...

  8. 用bochs调试自己写的系统引导代码

    1 安装和配置bochs 首先从bochs.sourceforge.net里面把BOCHS给download下来,鉴于Windows的普及,仅仅谈BOCHS在win下的使用方法,其实在其它的OS中方法 ...

  9. Effective JavaScript Item 63 注意异步调用中可能会被忽略的异常

    异常处理是异步编程的一个难点. 在同步的代码中,异常可以非常easy地通过try catch语句来完毕: try { f(); g(); h(); } catch (e) { // handle an ...

  10. Python 各种测试框架简介(三):nose

    转载:https://blog.csdn.net/qq_15013233/article/details/52527260 摘要 这里将从(pythontesting.net)陆续编译四篇 Pytho ...