【Linux】shell数组
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数组的更多相关文章
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- 转:linux shell 数组建立及使用技巧
linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...
- 转载-Linux Shell 数组建立及使用技巧
转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html 如侵犯版权,请联系我删除 linux shell在编程方面比win ...
- linux shell 数组建立及使用技巧
参考网址:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html linux shell在编程方面比windows 批处理强大太多 ...
- linux shell 数组的使用
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
- Linux Shell 数组
shell 数组一般都是一维数组. 1. 数组的声明 declare -a arr 该命令将声明一个数组arr,实际上不声明也可以直接定义数组. 2. 数组的初始化 arr=(1 2 3):该命令定义 ...
- linux shell数组
from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...
- linux shell数组赋值方法(常用)
http://blog.csdn.net/shaobingj126/article/details/7395161 Bash中,数组变量的赋值有两种方法: (1) name = (value1 ... ...
- Linux shell —— 数组与关联数组
使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ declare -A fruits_price $ fruits_ ...
- Linux shell之数组
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
随机推荐
- Java常用工具类之ArrayUtil
过滤 ArrayUtil.filter方法用于编辑已有数组元素,只针对泛型数组操作,原始类型数组并未提供. 方法中Editor接口用于返回每个元素编辑后的值,返回null此元素将被抛弃. 例如:过滤数 ...
- Kubernetes基础:查看状态、管理服务
目标 了解Kubernetes Pod 了解Kubernetes Node 学习如何调试部署问题 了解如何通过Service暴露应用 Kubernetes Pods 在Kubernetes中创建一个D ...
- android studio运行时报错AVD Nexus_5X_API_P is already running解决办法
运行刚搭建好的Android环境时会报这种错误: AVD Nexus_5X_API_P is already running. If that is not the case, delete the ...
- 概率校准与Brier分数
1.再提逻辑回归 前面已经讲过了逻辑回归,这里不再细讲,只是简单的说一个函数,主要是方便大家更好的理解概率校准. 在逻辑回归中,用的最多的就是sigmod函数,这个函数的作用就是把无限大或者无限小的数 ...
- USB线插拔检测使用UEventObserver检测uevent事件的分析
说实话这玩样儿的代码量真的很少,大家如果能耐得住性子啃一会儿也就能撸懂了. 在这之前研究USB线插拔的时候就知道了有这么个东西,当时也就看了看,但没做什么笔记.最近想用起来,却发现就只有个名字在记忆中 ...
- OC-字符串中大小写字母转换
一般语言中的大小写转换都会提供的有默认的函数,不过闲来无事,简单的模仿实现了一下: 系统中默认的大小写转换: NSString *name=@"博客园-FlyElephant"; ...
- AI 经典书单 | 人工智能学习该读哪些书
转载 2018年01月16日 00:00:00 人工智能相关岗位中,涉及到的内容包含: 算法.深度学习.机器学习.自然语言处理.数据结构.Tensorflow.Python .数据挖掘.搜索开发. ...
- JS弹出层遮罩,隐藏背景页面滚动条细节优化
做过弹层组件的童鞋应该都考虑过特殊情况下取消页面滚动条,让其不能滚动,这样用户体验会好很多,当弹层内容超出屏幕展现范围的时候在弹层上面增加滚动条来查看全部内容. 一.去除滚动条方法给body添加ove ...
- 我对android 软件栈了解
android 软件栈如图所示: Android平台的核心是Linux内核,它负责设备驱动程序.资源访问.电源管理和完成其他操作系统的职责.提供的设备驱动程序包括显示器.照相机,键盘.WiFi.闪存. ...
- Linux中盘符的两种挂载方法
相信接触过Linux系统的人对于mount命令都不陌生,今天是农历2017年的最后一个工作日,趁着时光还在,就说一下两种不同的挂载方法吧. 课前小知识: 命令格式:mount [-t vfstype] ...