shell编程(六)之数组
数组: 存储多个元素的连续的内存空间
索引: 编号从0开始,属于数值索引
注意:索引也可支持使用自定义的格式,而不仅仅是数值格式
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 关联数组,键值列表kv
数组元素的赋值:
1.一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE
weekdays[0]="Sunday"
weekdays[4]="Thursday"
2. 一次赋值全部元素
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
3.只赋值特定元素
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
4. read -a ARRAY
引用数组元素:${ARRAY_NAME[INDEX]}
注意: 省略[INDEX]表示引用下标为0的元素
#!/bin/bash
declare -a arr1 # 声明普通数组
declare -A arr2 # 声明关联数组 # 数组赋值
# 一次赋值一个元素
# arr1[]="Tom"
# arr1[]="Jerry" # 一次赋值全部元素
arr1=("Tom" "Jack" "Jerry" "slace") # 只赋值特定元素
# arr1=([]="Tom" []="Jerry" []="Jack") # 省略下标默认显示第0个元素
echo $arr1 # Tom # 数组长度
echo ${#arr1[*]} #
echo ${#arr1[@]} #
示例:生成10个随机数,并找出其最大值和最小值
#!/bin/bash
declare -i max=
declare -i min=
declare -a arr for i in {..};do
arr[$i]=$RANDOM
echo ${arr[$i]}
if [ ${arr[$i]} -gt $max ]; then
let max=arr[$i]
else
let min=arr[i]
fi
done
echo "max is $max,min is $min"
练习: 写一个脚本: 定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件,要统计其下标为偶数的文件中的行数
#!/bin/bash
declare -a arr
declare -i sumlines= arr=(/var/log/*.log) for i in $(seq 0 1 $[${#arr[@]}-1]); do
if [ $[$i%2] -eq 0 ]; then
let sumlines+=`wc -l ${arr[$i]} | cut -d' ' -f1`
fi
done echo "下标为偶数的文件中的行数为$sumlines行"
引用数组中的元素
所有元素:${ARRAY[@], ${ARRAY[*]}}
数组切片: ${ARRAY[@]:offset:number}
offset:要跳过的元素个数
number:要取出的元素个数,偏移量之后的所有元素: ${ARRAY[@]:offset}
数组的长度(数组中元素的个数): ${#ARRAY_NAME[*]}, ${#ARRAY_NAME[@]}
向数组中追加元素:
ARRAY[${#ARRAY[*]}]
删除数组中的某元素:
unset ARRAY[INDEX]
关联数组:
declare -A ARRAY_NAME
ARRAY_NAME=([index_name1]='val1' [index_name2]='val2' ...)
# 引用数组中的元素
# 引用数组中所有元素
echo ${arr1[@]}
echo ${arr1[*]} # 数组切片: ${arr1[@]:offset:number}
# 偏移两个元素取一位
echo ${arr1[*]::}
# 偏移几个元素后所有元素
echo ${arr1[@]:} # 向数组追加元素
arr1[${#arr1[@]}]="chengkaihua"
arr1[${#arr1[@]}]="alen"
echo ${arr1[@]} # 删除数组元素
unset arr1[]
echo ${arr1[@]} # 显示最后一位
echo ${arr1[$[${#arr1[*]}-]]} 结果显示:
Tom Jack Jerry slace
Tom Jack Jerry slace
Jerry
Jack Jerry slace
Tom Jack Jerry slace chengkaihua alen
Tom Jack slace chengkaihua alen
chengkaihua
练习:生成10个随机数,升序或降序排序
冒泡排序:
#!/bin/bash
declare -a arr
declare -i tmp= for i in {..};do
arr[$i]=$RANDOM
done for ((i=;i<$[${#arr[*]}-];i++));do
for ((j=;j<$[${#arr[*]}--$i];j++));do
if [ ${arr[$j]} -gt ${arr[$[$j+]]} ];then
let tmp=${arr[$j]}
arr[$j]=${arr[$[$j+]]}
arr[$[$j+]]=$tmp
fi
done
done
echo ${arr[@]}
shell编程(六)之数组的更多相关文章
- linux shell编程中的数组定义、遍历
代码如下: 数组定义法1: arr=( ) # 注意是用空格分开,不是逗号!! 数组定义法2: array array[]="a" array[]="b" ar ...
- shell编程2:数组的运用
Shell 数组 定义数组 在Shell中,用括号来表示数组,数组元素用"空格"符号分割开.定义数组的一般形式为: name=(name1 name2 name3) 复制代码 还可 ...
- 【shell】shell编程(六)-shell函数的应用
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; [return ...
- 【shell】shell编程(五)-读取参数
通过前几篇文章的学习,我们学会了shell的基本语法.在linux的实际操作中,我们经常看到命令会有很多参数,例如:ls -al 等等,那么这个参数是怎么处理的呢? 接下来我们就来看看shell脚本对 ...
- [ SHELL编程 ] 数组、关联数组和awk数组
本文主要对shell编程中常用的数组.关联数组和awk数组定义.操作以及注意事项做个总结,并提供具体案例. 数组 数组定义:一对圆括号表示数组,数组元素之间用空格符号分割. Array=(val1 v ...
- (转)轻松掌握shell编程中数组的常见用法及示例
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- shell编程系列4--有类型变量:字符串、只读类型、整数、数组
shell编程系列4--有类型变量:字符串.只读类型.整数.数组 有类型变量总结: declare命令和typeset命令两者等价 declare.typeset命令都是用来定义变量类型的 decla ...
- Linux Shell编程(3):数组
http://snailwarrior.blog.51cto.com/680306/154704 BASH只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array (其 ...
随机推荐
- LDAP与实现
LDAP是什么? LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以 ...
- php 数据库乱码。。。php 移动临时文件
数据库乱码,三个位置 处理好不会乱码 第一前台,传到后台: 第二后台,传到数据库: 第三数据库,存入数据库: 详解 https://www.cnblogs.com/zhoujinyi/p/46188 ...
- 转载,matla滤波函数
转载地址http://blog.sina.com.cn/s/blog_6163bdeb0102e1dj.html 滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选 ...
- 【jdbc访问数据库获取执行sql转换json】
Talk is cheap.Show me your code. import java.sql.*; import java.util.HashMap; import java.util.Map; ...
- python 不知道是啥
1.判断两个大文件是否是同一个文件 import os import hashlib import time start = time.time() path1 = r"E:\视频资料\el ...
- DAX/PowerBI系列 - 建模视图可以多个分页
PowerBI 十一月的更新终于有了一个解决密集恐惧症患者的方法,建模视图每个tab专注于一个领域,更加简洁. ps: Microstrategy早就有了.
- go语言生成一张正弦图
先看效果: package main import ( "image" "image/color" "image/png" "lo ...
- h5页面适配小结
大概是去年的7月想写这个内容去加深自己的理解.现在终于回来补上这篇入门小结了. 1.问题描述 适配的目标:在不同尺寸的手机设备上,页面“相对性的达到合理的展示(自适应)”或者“保持统一效果的等比缩放( ...
- 简单的C++输出日志
myLog.h #ifndef __myLog_H_ #define __myLog_H_ #include <stdio.h> #include <stdlib.h> #in ...
- c# 中HttpClient访问Https网站
c# 中HttpClient访问Https网站,加入如下代码: handler = new HttpClientHandler() ;handler.AllowAutoRedirect = true; ...