本文主要对shell编程中常用的数组、关联数组和awk数组定义、操作以及注意事项做个总结,并提供具体案例。

数组

数组定义:一对圆括号表示数组,数组元素之间用空格符号分割。

Array=(val1 val2 val3)

数组操作:包括获取长度,数组元素查询、增加、删除、修改,获取数组下标

#获取数组长度
${#Array[@]} #Arr表示数组名,下同
${#Array[*]} #获取数组元素
${Array[@]} #获取数组全部元素
${Array[*]} #同上
${Array[]} #获取数组指定位置元素,下标从0开始
${Array[*]::} #获取指定范围的数组元素 #增加数组元素
Array[]=oracle #原数组不存在下标为2 #修改数组元素
Array[]=oracle #原数组存在下标为2,注意与增加方式的区别 #删除数组元素
unset Array[] #带下标则为清除指定位置元素
unset Array #不带下标,清除全部数据 #替换操作,不会修改原数组元素
${Array[@]/oracle/root} #获取数组下标
${!Array[@]}

关联数组

数组定义:与普通数组区别就是可以用字符串作为数组下标,定义方式为用declare -A声明变量。

declare -A Array

数组操作:与普通数组相同,重点描述下编程中常用的根据指定的下标获取元素。关联数组默认输出的顺序是无序的。

for key in ${!Array[*]}
do
echo "The value of ${key} is ${Array[$key]}"
done

awk数组

数组定义:默认为关联数组,下标可以是数字或者字符串,且不需要申明,可直接使用。特别一点是awk可以用split生成数组

#通过split函数间接生成数组
awk 'BEGIN{info="I LOVE CHINA";split(info,Array," ");}' #split为awk内置函数,info表示字符串,Array表示生成数组," "表示分隔符 #直接生成数组
awk 'BEGIN{for(i=0;i<=2;i++)Array[i]=i;}'

数组操作:部分操作与上述不同,下面描述一下

#获取数组长度
awk 'BEGIN{for(i=0;i<=2;i++)Array[i]=i;print length(Array)}' #调用内置函数length获取
awk 'BEGIN{info="I LOVE CHINA";len=split(info,Array," ");print len}' #split函数返回数组长度

操作实例

1、tcp端口状态统计

$ netstat -an | awk '/^tcp/ {++Arr[$NF]} END {for(a in Arr) print a, Arr[a]}'
LISTEN
ESTABLISHED
SYN_SENT

2、将用户和用户家目录保存到数组,后续可根据用户名获取家目录。可根据具体场景修改如下代码

#!/bin/bash

[ -f file.unl ] && rm file.unl
awk -F':' '{print $1,$6}' /etc/passwd | head -n > file.unl #only for test
declare -A Arr
while read col1 col2
do
Arr[${col1}]=${col2}
done < file.unl for user in ${!Arr[@]}
do
printf "The directory of ${user} is ${Arr[${user}]}\n"
done

输出:

The directory of bin is /bin
The directory of daemon is /sbin
The directory of root is /root

[ SHELL编程 ] 数组、关联数组和awk数组的更多相关文章

  1. 【转】awk数组操作

    转自:http://blog.csdn.net/wangran51/article/details/9168361 用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算 ...

  2. linux awk数组相关操作介绍

    用awk进行文本处理,少不了就是它的数组处理.那么awk数组有那些特点,一般常见运算又会怎么样呢.我们先看下以下的一些介绍,结合样例我们会解说下它的不同之处.在 awk 中数组叫做关联数组(assoc ...

  3. Linux(8):linux三剑客sed和awk & Shell 编程(1)

    linux 三剑客 之 sed # sed 是什么? # sed : 字符流编辑器 Stream Editor: sed 擅长 替换.取行等 # sed 的功能与版本: 处理纯文本文件.日志.配置文件 ...

  4. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  5. shell编程之数组和关联数组

    一.数组类似c语言的数组 1.两种赋值方式 可以整体定义数组:ARRAY_NAME=(value0 value1 value2 value3 ...) 此时数组的下标默认是从0开始的 还可以单独定义数 ...

  6. Linux - 简明Shell编程07 - 数组(Array)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash test0=() # 定义数组 ...

  7. (一)Linux Shell编程——简介、变量、字符串、数组

    1. Shell简介 1.1 Shell出现背景 Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件. 对于图形界面,用户点击某个图标就能启动某个程序:对于命令行,用户输入某个程序的名字( ...

  8. (转)轻松掌握shell编程中数组的常见用法及示例

    缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...

  9. shell编程系列4--有类型变量:字符串、只读类型、整数、数组

    shell编程系列4--有类型变量:字符串.只读类型.整数.数组 有类型变量总结: declare命令和typeset命令两者等价 declare.typeset命令都是用来定义变量类型的 decla ...

随机推荐

  1. Oracle SQL:select各类查询语句总结

    SQL查询语句总结 数据查询语言:即DML(Data Mannipulation Language)数据操纵语言,用于查询.操纵数据表资料行 本手册所有示例引用表均以TIPTOP GP  ERP数据库 ...

  2. (转)Linux 系统服务的启动顺序解析 rc.*

    介绍系统按照不同级别启动时需要启动的服务. 进入目录:etc 执行命令:ls -l | grep "rc.*" | sort 结果如下图:   1 系统在启动时,通过inittab ...

  3. (转)C#读取MAC的几种方法

    原文地址:http://www.cnblogs.com/diulela/archive/2012/04/07/2436111.html 1 通过IPConfig命令读取MAC地址 ///<sum ...

  4. Java - 18 Java Scanner 类

    java.util.Scanner是Java5的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner ...

  5. 一、Html5基础讲解以及五个标签

    什么是html?html是用来描述网页的一种语言html指超文本标记语言html不是编程语言,是一种标记语言 HTML基础标签 Head.body html标题 <h1>…<h6&g ...

  6. PHP中json_encode()问题

    PHP 生成JSON的时候,必须将汉字不转义为 \u开头的UNICODE数据. 要想不转义,在后面加个参数即可 json_encode($data, JSON_UNESCAPED_UNICODE);  ...

  7. js全局变量污染

    一.定义全局变量命名空间 只创建一个全局变量,并定义该变量为当前应用容器,把其他全局变量追加在该命名空间下 var my={}; my.name={ big_name:"zhangsan&q ...

  8. python时间日期字符串各种

    python时间日期字符串各种 第一种 字符串转换成各种日期 time 库 # -*- coding: utf-8 -*- import time, datetime # 字符类型的时间 tss1 = ...

  9. Flutter实例一--底部规则导航栏制作

    先来看看制作效果: 前置知识--StatefulWidget  StatefulWidget具有可变状态(state)的窗口组件(widget).使用时要根据变化状态,调整State值, 能够快速初始 ...

  10. mybatis关系映射之一对多和多对一

    本实例使用用户(User)和博客(Post)的例子做说明: 一个用户可以有多个博客, 一个博客只对应一个用户 一. 例子(本实体采用maven构建): 1. 代码结构图: 2. 数据库: t_user ...