数组

数组

量:存储单个元素的内存空间

数组:存储多个元素的连续的内存空间,相当于多个变量的集合

数组名和索引

索引:编号从0开始,属于数值索引

注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,

八十的数组支持稀疏格式(索引不连续

声明数组:

Declare -a ARRAY_NAME

Declare -A ARRAY_NAME:关联数组

注意:两者不可相互转换

数组元素的赋值

  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 ARRAYx

 

Title=({ceo coo cto ufo})

Num=({1..10})

Touch /app/f{1..10}.sh

File=({/app/f*.sh})

只要能生成列表,就可以放进去

 

交互式

Read -a teachers    mage   wang  zhang

echo ${teachers[@]}

 

 

显示所有数组 :declare -a

引用数组元素

${ARRAY_NAME[INDEX]}

注意:省略[index]表示引用下标为0的元素

引用数组所有元素:

${ARRAY_NAME[*]}

${ARRAY_NAME[@]}

数组的长度(数组中的元素个数)

${#ARRAY_NAME[*]}

${#ARRAY_NAME[@]}

删除数组中的某个元素:导致稀疏格式

unset ARRAY[index]

删除整个数组: unset ARRAY

数组数据处理

关联数组   关联数组意思是下标时自定义的

Declare -A ARRAY_NAME

ARRAY_NAME=([IDX_NAME]=’VAL1’ [IDX_NAME2]=’VAL2’…)

关联数组必须先声明再调用

declare -A arr

Arr[a]=1

Arr[b]=2

Arr[c]=3

向数组中追加元素

num={[1..10]}

unset num [3]

Num[3]=44

 

 

#!/bin/bash

declare -A  disk

df|grep ‘/dev/sd’ > df.log

while read line;do

        index=`echo $line|cut -d ” ” -f1`

        echo index=$index

        per=`echo $line |sed -r ‘s/.* ([0-9]+)%.*/\1/’`

        echo per=$per

        disk[“$index”]=$per

        echo ${disk[*]}

        echo “========”

done < df.log

echo ${disk[*]}

注意:df linux服务器的文件系统的磁盘空间占用情

df|grep ‘/dev/sd’ > df.log将grep取出来的数据重定向到df.log中,done < df.log 将文件中的数据送给read,read逐行读取数据进行处理,每次处理都打印相关的输出,最后跳出循环,打印数组所有值,

While开启一个子循环,它的父循环中的数据对子循环无效,因此要重新定义到df.log中,

数组数据处理

引用数组中的元素:

数组切片:${ARRYAY[@]:offset:number}

Offset:要跳出的元素个数

Number:要取出的元素个数

取偏移量之后的所有元素

${ARRAY[@]:offset}

num=({1..10})

{num[@]:3:4}  跳过3个取4个

向数组中追加元素:ARRAY[${#ARRAY[@]}]=VALUE

题目:生成10个随机数保存于数组中,并找出其最大值和最小值

#!/bin/bash

declare -a rand

for ((i=0;i<10;i++));do

rand[$i]=$RANDOM

[ “$i”-eq 0 ] && max=${rand[$i]} && min=${rand[$i]} && continue

[ ${rand[$i]} -gt $max ] &&  max=${rand[$i]} && continue

[ ${rand[$i]} -lt $min ] && min=${rand[$i]}

done

echo ${rand[*]}

echo “max:$max  min:$min”

~

 

#!/bin/bash

declare -a rand

declare -i max=0

declare -i min=32767   #随机生成的数字,最大值时32767

for i in {0..9};do

        rand[$i]=$RANDOM

        echo ${rand[$i]}

        [ ${rand[$i]} -gt $max ] && max=${rand[$i]}

        [ ${rand[$i]} -lt $min ] && min=${rand[$i]}

done

echo “max:$max” “min:$min”

编写脚本,定义一个数组,数组中的元素是/var/log目录下所有已.log结尾的文件;统计出其下方为偶数的文件中的行数之和

#!/bin/bash

#

declare -a files

files=(/var/log/*.log)

declare -i lines=0

for i in $(seq 0 $[${#files[*]}-1]);do

if [ $[$i%2] -eq 0 ];then

let lines+=$(wc -l ${files[$i]} | cut -d’ ‘ -f1)

fi

done

echo “lines: $lines.”

题目,将下图所示,实现转置矩阵matrix.sh

 

#!/bin/bash

declare -A matrix=([00]=1 [01]=2 [02]=3 [10]=4 [11]=5 [12]=6 [20]=7 [21]=8 [22]=9)

size=3

showmatrix(){

for ((i=0;i<size;i++));do

for((j=0;j<size;j++));do

echo -n “${matrix[$i$j]}   ”

done

echo

done

}

echo “Before convert”

showmatrix

for ((i=0;i<size;i++));do

for((j=i;j<size;j++));do

if [ $i -ne $j ];then

temp=${matrix[$i$j]}

matrix[$i$j]=${matrix[$j$i]}

matrix[$j$i]=$temp

fi

done

echo

done

echo “After convert”

showmatrix

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90783

(0)
上一篇 2018-01-02 18:42
下一篇 2018-01-02 19:25

相关推荐

  • LVM逻辑卷管理

    前言     通常情况下,在操作系统上新建了一个分区并在此分区创建文件系统后,该文件系统的大小就固定了。假如要增加此文件系统的大小,我们不得不添加一块硬盘并重新分区,创建文件系统,然后把原文件系统的数据完整复制过来。如果第二次分区时分配的空间太大,用不完又浪费该怎么办呢?重复此前的流程又将花费大量的时间,有没有更便捷的…

    Linux干货 2015-05-04
  • linux中如何使用帮助

     在linux学习过程中,会遇到许多困难,尤其是一些命令掌握不牢固,不知道具体用法;或者是想要实现一些功能而不知道使用何种命令。这时求人不如求己,上网求助不如自己学会使用帮助,下面介绍几种linux帮助的用法。 1.what is +命令    执行这条命令可以显示命令的简短描述,让大家了解命令的基本功能。同时可以看到命令相关章…

    2017-07-23
  • Linux上实现rsyslog+mysql+loganalyz进行日志收集

    在我们的运维工作中,常常会对系统上的日志进行收集,手动管理少量的几台服务器的日志收集没有太大难度,但是企业当中批量的管理成千上万台服务器的时候,这时候想一台台的收集日志未免太浪费时间了,这时候我们需要一个批量管理日志的系统来解决这一难题,今天我给大家带来的使用 1、syslog介绍       &n…

    Linux干货 2016-10-24
  • 第一篇博客 简单说下最近的学习心得吧

        今天是个特殊的日子, 来到马哥教育已经一周时间了,刚来的时候满环信心,感觉人生充满了希望,但是接下来的学习让我感受到了什么是绝望,刚开始的两天完全是一种朦胧的状态,不知道干什么,敲得命令也不理解,完全是生搬硬套,没有自己的认知,当时就有一种冲动想要一走了之,后来想想算了 ,然后就坚持到了现在,此时感觉当时的决定是对的,经过一周的学…

    2017-07-15
  • Linux Cluster之keepalived及keepalived + LVS DR的实现

      一、HA Cluster基础 系统可用性A=MTBF/(MTBF+MTTR) MTBF:平均无故障时间 MTTR:平均修复时间 降低MTTR的方式:冗余(redundent) 衡量标准:几个9 90%、99%、99.9%… 提升系统可用性的办法之一:降低MTTR 通过冗余(redundant)的方式能够避免单点故障(SPoF),从而…

    2016-11-02
  • Linux-系统启动的基本过程 以及相关破环修复实验。

    这章简单描述下系统的启动流程,主要以破环修复实验为主: 系统启动基本过程:       Linux系统启动过程大致按照如下步骤进行(这是一个简述):        第一阶段:BIOS启动引导阶段;       …

    2017-07-10