数组

数组

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

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

数组名和索引

索引:编号从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)
sunchunjiangsunchunjiang
上一篇 2018-01-02 18:42
下一篇 2018-01-02 19:25

相关推荐

  • 【LINUX编译安装程序】Centos7.4编译安装httpd 2.4.29

    举例:Centos7.4编译安装httpd 2.4.29

    Linux干货 2018-03-17
  • 启动和内核管理

    一、Linux组成     Linux: kernel+rootfs         kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能       &nb…

    Linux干货 2016-09-18
  • 1017练习题

    1017练习题 作业 10月17日 柴震 1.生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。 hwclock 查看硬件是否准确,如准确无误,可以使用hwclock -s以硬件时间为准。 或者使用ntpdate命令指定一台NTP服务器,进行同步。 2.生产有一个数据同步脚本需要执行很长时间,怎样做到无人值守,在…

    Linux干货 2016-10-18
  • linux查找命令locate、find

    本次博主来介绍下超实用的查找命令,没有查不到,只有做不到。 直接上干货:查找命令:locate和find,常用find,我们重点介绍find locate 通过查询系统上预建的文件索引数据库全盘查找所需文件,locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在执行loacte时直接找该索引,查询速度会较快,索引的构建是在系统…

    2017-08-12
  • Linux文件类型及颜色标识整理

    前言: 在windows中,我们用不同的后缀名标识不同类型的文件。而在linux中却没有这样的机制,虽然我们可以人为的进行标识,但是在linux并没有扩展名的说法。linux中我们可以用type 或者用ls -l 查看到每个文件的类型,并且通过ls –color参数,不同类型的文件会标识不同的颜色。接下来我们就详细介绍各个文件类型和与之对应的颜色…

    Linux干货 2016-10-17
  • Linux发行版之间的联系与区别及其哲学思想。

    一、Linux发行版之间的联系与区别。 随着Linux不断发展,Linux所支持的文件系统类型也在迅速扩充。很多的数据中心服务器上都运行着Linux,可以节省大量的许可证费用及维护费用。但伴随着Linux新版本的发行,其中每一个不同版本的Linux所支持的文件系统类型都有所不同。Linux的发行版有数百种之多。 1、Debian:是指一个致力于创建自由操作系…

    Linux干货 2016-10-30