linux数组shell数组添加内容,shell数组的定义与应用
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数组的定义与应用相关推荐
- linux在指定行添加内容,linux下利用shell在指定的行添加内容的方法
linux下利用shell在指定的行添加内容的方法 在linux的一些配置中总会要进行某个文件中的某行的操作,进行增加,修改,删除等操作. 而这里主要是进行的是指定的行添加数据的操作: 脚本如下: s ...
- 19号以后包括数组在内的所有内容(数组、函数、方法、dom操作)
数组: 1.数组就是许多变量,他们的名称和数据类型都是一致的. 数组元素:就是数组里面的每一项 2.数组下标: 数组的下标是0的元素是数组的第一个元素(数组的下标是从0开始的). 3.获取数组的长度: ...
- java添加字符串数组_java – 如何将字符串数组的元素添加到字符串数组列表?...
你已经有了内置的方法: – List species = Arrays.asList(speciesArr); 注意: – 您应该使用List< String>不是ArrayList< ...
- linux判断两个文件内容,shell怎么判断两个文件内容是否相同
#cat diff_two_file #/bin/sbin file1=/mnt/mmc/test/aa file2=/mnt/mmc/test/bb diff $file1 $file2 > ...
- linux shell 编辑文件内容,Shell编辑与文本处理(Bash sed文本编辑)
释放双眼,带上耳机,听听看~! 1 sed 命令格式 sed 的全称是 stream editor,也就是流编辑器.其作用便是将文本文件或来自于管道符传入的输入流做文本的处理,如替换.增加内容.删除内 ...
- 将数组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, ...
- JavaScript 常用数组方法及使用技巧「数组的力量隐藏在数组方法中,必收藏」
JavaScript 数组的力量隐藏在数组方法中. 没错!如果你只知道用数组,但是不知道数组的这些方法怎么用,那么你就不是真正的懂他. 正餐开始,来看看 JavaScript 中有哪些常用的数组方法! ...
- 细说PHP笔记03(第7章)--数组与数据结构,数组定义,数组遍历,数组内部指针遍历,键值操作函数,统计数组函数,回调函数处理数组元素,数组排序,拆分、合并、分解、结合数组,数组实现堆栈,随机选取元素
1.数组 索引数组:索引值是整数 关联数组:索引值是字符串 2.数组的定义 1.以直接赋值的方式声明 $数组名[下标]=资料内容 或 $数组名[关联字符串(键值)]=资料内容 <?php $va ...
- 数组 Array (全世界最详细的数组解释)
数组 Array,可以用来将多条数据通过 [] 包裹起来组成一个整体. 例如: \1. var arr = [100, 'hello', true, 200]; 说明: · 元素(数组项):数组中的每 ...
最新文章
- 虽被BERT碾压,但还是有必要谈谈BERT时代与后时代的NLP
- 目标检测别再刷榜了,让流感知来展示真正的技术!ECCV 2020 最佳论文提名
- 2019年,人工智能要落地,更要小心被“摔死”
- 北恒生物获德诚资本约1亿元A轮融资,德诚资本投资
- alert中添加表格_Excel设置表格边框的几种方法,还有自动添加边框哟
- linux下批量修改文件名的方法
- c语言不同类型指针间的强转,C语言中不同的结构体类型的指针间的强制转换详解...
- 超经典解释什么叫网关
- Win Form登录机制的实现
- TCP/IP 三次握手
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨4.73%
- 一次比较麻烦的性能问题诊断及解决
- C语言基础选择题100道(附答案)01
- 重装win10提示在EFI系统上,Windows只能安装到GPT磁盘
- QCC305x系列开发教程(入门篇)之1.3-烧录方式使用USB时的驱动安装及其出现“未知设备”的解决方法
- excel中条形图的条目排序与逆序
- Java--Spring入门
- 离群值 excel_如何(以及为什么)在Excel中使用离群值函数
- 歪理邪说解析架构设计师上午考试试题之一(分析2010下半年系统架构设计师上午试题01-05题)
- (项目)在线教育平台(十三)
热门文章
- Springboot 抛出Failed to determine a suitable driver class异常原因
- PHP 中提示undefined index如何解决(多种方法)
- 解决Parameter ‘__frch_item_0‘ not found. Available parameters 问题
- Python 中文注释报错解决方法
- 我可以直接从GitHub运行HTML文件,而不仅仅是查看它们的来源吗?
- 手把手教你实现一个 Vue 进度条组件!
- spring事务介绍
- 50年前就已讨论的数据中心隐私问题
- 《python 与数据挖掘 》一1.3 Python开发环境的搭建
- 分布式存储的三个基本问题