shell脚本快速入门之-----数组
时间:2022-07-24
本文章向大家介绍shell脚本快速入门之-----数组,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、数组的含义
什么是数组?数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
二、数组的分类
普通数组:不需要声明直接定义,下标索引只能是整数 关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串
三、数组的格式
1、格式解读
如:arr=(11 22 33 44) 数组名称:arr 数组元素:11,12,12,14,数组元素默认是以空格分隔的 数组长度:4,有4个元素 数组下标:每个数组元素都有一个下标索引,一般从0开始,33是数组第三个元素,但是它的下标索引是2
2、定义一个数组
第一种:直接把要加入数组的元素用小括号括起来,中间用空格分开 num=(11 22 33 44)
第二种:精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续 num=([0]=55 [1]=66 [2]=77 [4]=88)
第三种:先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组 list=“11 12 13 14” num=($list)
第四种:可以把命令的结果用小括号括起来添加到数组,那么数组会以空格或者制表符区分每一个元素
num=(cat /etc/passwd
)
四、数组的操作
1、读取数组和元素
[root@server myscripts]# arr=(10 20 30 40 50) //定义了一个arr数组
[root@server myscripts]# echo ${arr[3]} //查看数组中索引是3的元素
40
[root@server myscripts]# echo ${arr[*]} //查看数组中所有的元素
10 20 30 40 50
[root@server myscripts]# echo ${arr[@]} //查看数组中所有的元素,同${arr[*]}
10 20 30 40 50
2、查看当前所有数组
[root@server myscripts]# declare -a
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a arr='([0]="10" [1]="20" [2]="30" [3]="40" [4]="50")'
declare -a num='([0]="55" [1]="66" [2]="77" [4]="88")'
3、查看数组索引
[root@server myscripts]# echo ${!num[*]}
0 1 2 4
1
2
4、查看数组元素个数
[root@server myscripts]# echo ${#num[*]}
4
1
2
5、替换数组元素
[root@server myscripts]# echo ${num[*]/77/55} //只是临时替换
55 66 55 88
[root@server myscripts]# echo ${num[*]}
55 66 77 88
6、删除数组
(1)删除数组元素
[root@server myscripts]# unset num[2] //unset后面跟数组元素的下标
[root@server myscripts]#
[root@server myscripts]# echo ${num[*]}
55 66 88
[root@server myscripts]# echo ${#num[*]}
3
[root@server myscripts]# echo ${!num[*]}
0 1 3
(2)删除整个数组
[root@server myscripts]# unset num //后面直接跟数组名即可
[root@server myscripts]# declare -a
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a arr='([0]="10" [1]="20" [2]="30" [3]="40" [4]="50")'
五、数组脚本实例
1、把1-100的数字加入数组(2种方式)
#!/bin/bash
list=`seq 1 100`
num=($list)
echo ${num[*]}
[root@server myscripts]# vim arr3.sh
#!/bin/bash
for ((i=0;i<=99;i++));do
arr[$i]=$[$i+1]
done
echo ${arr[*]}
[root@server myscripts]# . arr3.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
2、输出1-100以内的奇数
#!/bin/bash
j=0
for ((i=1;i<100;i++))
do
if [ $[$i%2] -ne 0 ] #if [ `expr $i % 2` -ne 0 ]这样也可以
then num[$j]=$i
fi
let j++
done
echo ${num[*]}
3、输出数组中最大的值
[root@server ~]# vim paixu2.sh
#!/bin/bash
arr=(90 20 40 50)
max=${arr[$0]}
for((i=0;i<${#arr[*]};i++))
do
if [ $max -lt ${arr[$i]} ]
then
max=${arr[$i]}
fi
done
echo $max
[root@server ~]# . paixu2.sh
90
4、根据客户需求加入元素到数组
#!/bin/bash
arr(){
read -p "请存入元素:" n
echo $n >> /opt/text1.txt
list=`cat /opt/text1.txt`
num($list)
echo "数组中的元素:${num[*]}"
}
while :
do
read -p "您想要加入元素吗?[Y/N]: " add
if [ "$add" == "Y" ]
then
arr
elif [ "$add" == "N" ]
then
echo "再见!"
break
fi
done
5、把数组中不满足60分的加到60分
#!/bin/bash
num=(90 90 90 50 90 40 50 30)
for ((i=1;i<=${#num[*]};i++))
do
if [ $[num[$i-1]] -lt 60 ]
then
num[$i-1]=60
fi
done
echo ${num[*]}
6、删除数组中不足60分的元素
[root@server ~]# vim unset.sh
#!/bin/bash
arr=(70 60 80 40 30 20)
i=0
for v in ${arr[*]};do
if [ $v -lt 60 ];then
unset arr[$i]
fi
let i++
done
echo ${arr[*]}
[root@server ~]# . unset.sh
70 60 80
- 数据结构是哈希表(hashTable)(二)
- Oracle的Replace函数与translate函数详解与比较
- 关于奇怪的并行进程分析(二) (r6笔记第46天)
- Linux性能分析工具与图形化方法
- MySQL和Oracle中的隐式转换(r6笔记第45天)
- R语言的数据导入与导出(write.table,CAT)
- gqlplus的简单使用(r6笔记第43天)
- Java基础-21(01)总结字符流,IO流编码问题,实用案例必做一遍
- zabbix中配置dg的监控(r6笔记第62天)
- Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088)分析
- mysql5.5与mysq 5.6中禁用innodb引擎的方法
- 缓慢的update语句性能分析(r6笔记第61天)
- 一个dg警告发现的硬件问题 (r6笔记第60天)
- mysql几种存储引擎介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [Go] Golang练习项目-GO语言实现快速排序-第一个数作为基准更容易理解
- 有赞移动基础设施建设的实践和思考
- 大数据理论篇HDFS的基石——Google File System
- 6. 二十不惑,ObjectMapper使用也不再迷惑
- 接口自动化对比工具实践
- 什么?Java9这些史诗级更新你都不知道?Java9特性一文打尽!
- 利用 Arthas 精准定位 Java 应用 CPU 负载过高问题
- 你想了解的JDK 10版本更新都在这里
- Linux Page Cache调优在 Kafka 中的应用
- 声明式 UIKit 在有赞美业的实践
- 一个@Transaction哪里来这么多坑?
- 绘图代码|10种绘制热图方法,你想要的全都有!
- 有赞DB连接池性能优化
- 有赞移动热修复平台建设
- 有赞零售智能硬件体系搭建历程