Shell中数组以及其相关操作的详细实例_linux shell

来源:脚本之家  责任编辑:小易  

Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,其重要应用场景,可以求数组长度,元素长度,遍历其元素,元素切片,替换,删除等操作,使用非常方便。

Shell中的数组不像JAVA/C,只能是一维数组,没有二维数组;数组元素大小无约束,也无需先定义数组的元素个数;但其索引则像JAVA/C/Python,从0开始,下面其常用的方式进行总结.

【数组声明】

备注:

1) 不像JAVA/C等强编程语言,在赋值前必须声明;SHELL只是弱编程语言,可事先声明也可不声明;

2) 用unset来撤销数组,可用unset array_name[i]来删除里面的元素

【数组定义】

备注:

1) 数组中的元素,必须以"空格"来隔开,这是其基本要求;

2) 定义数组其索引,可以不按顺序来定义,比如说:names=([0]=Jerry [1]=Alice [2]=David [8]=Wendy);

3)字符串是SHELL中最重要的数据类型,其也可通过($str)来转成数组,操作起来非常方便;

【数组长度】

备注:

1) 使用${array_name[@]} 或者 ${array_name[*]} 都可以全部显示数组中的元素

2) 同样道理${#array_name[@]} 或者 ${#array_name[*]}都可以用来求数组的长度

3)求数组中元素的长度方法有很多,相当于求字符串的长度

【数组索引】

[root@locathost ~]# s="A,B,C,D"
[root@locathost ~]# a=(`echo $s | tr ',' ' '`)  # 将字符串转变成数组
[root@locathost ~]# echo ${!a[@]}        # 求数组中的索引 
0 1 2 3

元素删除】 

[root@localhost ~]# a=(A B C D)
[root@localhost ~]# unset a[2]     # 删除索引为2的元素
[root@localhost ~]# echo ${a[@]}    # 显示删除后的元素
A B D

【数组遍历】

脚本输出:

备注:

1) 可以使用标准的for循环,这种类C语言的方式来遍历数组中的元素

2) for 元素 in 元素集(数组) 这种类Python的方式来遍历数组

3)从代码可读性与执行速度来看,推荐使用第二种方式

【数组赋值】

备注:

1) 第一种是给已经存在的元素项重新赋值

2) 当然也可以给不存在的索引添加赋值,可以看下面的示例

【数组添加】

【数组切片】

数组切片

元素切片

备注:

1) 通用的格式${array[@]:起始位置:长度},中间以":"隔开,如果第二项省略的话,就取后面所有的项

2) 切片后返回的是字符串,可以通过 新数组=(${旧数组[@]:索引:长度})来索引,参见上面最后一个例子

3) 区别于Python之一:起始位置可以为负数,但必须以放在()中,长度不能为负数

4)区别于Python之二:第二项在Python里面是结束索引,在Shell则代表所取元素的长度

5) 区别于Python之三:Python可以通过 list[-1:-4:-2]来反向取数,在Shell则实现不了

【数组替换】

${array[@]/x/y}     最小匹配替换,每个元素只替换一次

${array[@]//x/y}    最大匹配替换,每个元素可替换多次

${array[@]/x/}      最小匹配删除,只删除一个符合规定的元素

${array[@]//x/}     最大匹配删除,可删除多个符合规定的元素

${array[@]/#x/y}     从左往右匹配替换,只替换每个元素最左边的字符

${array[@]/%x/y}     从右往左匹配替换,只替换每个元素最右边的字符

【数组删除】

#  每个元素,从左向右进行最短匹配

## 每个元素,从左向右进行最长匹配

%  每个元素,从右向左进行最短匹配

%% 每个元素,从右向左进行最长匹配

【数组应用】

示例一: 将ifconfig命令取到的本地IP: 127.0.0.1逐行显示出来

脚本输出:

示例二: 模拟堆栈的push,pop,shift,unshift操作

脚本输出:

示例三: 在1-10间,随机生成10个不重复的数,将其放置于数组中

脚本输出:

备注:

1) 生成[1,10]范围内不重复的随机整数,并保存到数组array中

2) seq 1 10 用于生成1~10的整数序列(包含边界值1和10)

3) awk中的rand()函数用于随机产生一个0到1之间的小数值(保留小数点后6位)

4)rand()只生成一次随机数,要使用srand()函数使随机数滚动生成

5) 括号里留空即默认采用当前时间作为随机计数器的种子,这样以秒为间隔,随机数就能滚动随机生成了

6) 由于以秒为间隔,所以如果快速连续运行两次脚本(1s内),你会发现生成的随机数还是一样的

示例四: 将字符串处理后转为为数组,再对其打印输出

脚本输出:

示例五: 用read -a参数,从标准输入中读取数组,再做操作

脚本输出:

示例六:  判断某个变量,是否在数组中,在输出YES,否输出NO

脚本输出:

示例七:  对数组中的元素进行排序

示例八:  将/etc/passwd文件中以:分隔的第一列,即用户名放置于一个数组中

示例九:  将1-8,每个数自乘后输出

脚本输出:

示例十:  借助数组来设置SHELLS的环境变量

示例十一:  设置IFS,读取文件内容示例

示例十二:  利用eval,模拟实现数组的功能

脚本输出:

示例十三:  利用数组来实现冒泡排序

思路:会重复地走访过要排序的数组,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。越大的元素会经由交换慢慢“浮”到数列的顶端

脚本输出:

示例十四:  利用数组来求最大值

脚本输出

总结

到此这篇关于Shell中数组以及其相关操作的文章就介绍到这了,更多相关Shell数组操作内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:Shell脚本数组操作小结Shell脚本数组用法小结linux shell数组深入学习理解shell for循环与数组应用介绍linux shell 中数组的定义和for循环遍历的方法Linux shell数组循环的实例详解Shell中创建序列和数组(list、array)的方法shell 使用数组作为函数参数的方法(详解)浅谈shell数组的定义及循环Shell动态生成数组的多种方法

  • 本文相关:
  • linux 中的atq命令
  • shell遍历目录处理特定目录的脚本代码
  • shell中字符串排序的几种方法
  • shell(())实现对整数进行数学运算
  • bash scp command not found的解决方法
  • 一个简单的linux命令 mv
  • 让linux下的cron以秒为单位执行shell脚本的3种方法
  • shell中特殊字符的用法总结大全
  • linux中编写自己的并发队列类(queue 并发阻塞队列)
  • linux启动级别的含义(init 0-6)
  • Linux的Shell相关知识简要描述几种主流的shell及特...
  • 如何用shell脚本语言操作数组
  • linux shell中数组循环取值和赋值的问题。
  • shell脚本中数组array常用技巧学习实践
  • shell中数组怎么循环赋值,急
  • 列出5个熟悉的linux shell命令,并指明它们能够完...
  • 菜鸟求教linux shell下的函数和数组
  • linux shell脚本中,数组名称是一个变量,怎么打印...
  • linux下shell脚本命令
  • linux shell编程中怎样编历数组
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全vbsdos/bathtahtcpythonperl游戏相关vba远程脚本coldfusionruby专题autoitseraphzonepowershelllinux shellluagolangerlang其它首页shell脚本数组操作小结shell脚本数组用法小结linux shell数组深入学习理解shell for循环与数组应用介绍linux shell 中数组的定义和for循环遍历的方法linux shell数组循环的实例详解shell中创建序列和数组(list、array)的方法shell 使用数组作为函数参数的方法(详解)浅谈shell数组的定义及循环shell动态生成数组的多种方法linux 中的atq命令shell遍历目录处理特定目录的脚本代码shell中字符串排序的几种方法shell(())实现对整数进行数学运算bash scp command not found的解决方法一个简单的linux命令 mv让linux下的cron以秒为单位执行shell脚本的3种方法shell中特殊字符的用法总结大全linux中编写自己的并发队列类(queue 并发阻塞队列)linux启动级别的含义(init 0-6)linux shell中 if else以及大于、linux中执行shell脚本的4种方法总shell脚本8种字符串截取方法总结shell字符串比较相等、不相等方法shell脚本中让进程休眠的方法(sshell脚本if条件判断和判断条件总linux命令详解之useradd命令使用shell逐行读取文件的4种方法shell脚本中执行sql语句操作mysqshell脚本中判断输入变量或者参数浅谈ci脚本异常退出问题定位大小写字母转换的shell脚本代码linux系统上传下载命令rz和sz的教程bash 循环中变量作用范围的问题分析shell脚本逐行读取文本文件(不改变文本格linux下监视进程 崩溃挂掉后自动重启的shshell过滤器的具体使用linux监控cpu以及内存使用情况之top命令(linux 中批量提取文件夹下所有目录及文件shell编程跨服务器备份文件
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved