数组

数组

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

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

数组名和索引

索引:编号从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
下一篇 2018-01-02

相关推荐

  • zabbix部署(Linux上部署/监控端/被监控端)

    zabbix部署 一、监控系统的简单介绍 (1)cacti:存储数据能力强,报警性能差 (2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中。比如,连续采样数据存储,有连续三次不在合理范围内的数据就报警 (3)zabbix:结合上面两种工具的优点,又可以存储数据,又可以报警 二、zabbix特性 (1)数据采…

    Linux干货 2017-01-06
  • Linux 网络属性管理

    在介绍Linux网路属性管理之前,我还要介绍下以太网(Enternet) 以太网的工作原理 以太网才用带冲突检测的载波侦听多路访问(CSMA/CD)机制。以太网中节点都可以看到在网络中发送的所有信息,因此,我们说以太网是一种广播网络。 以太网的工作过程如下: 当以太网中的一台主机要传输数据时,它将按如下步骤进行: 1.监听信道上是否有信号在传输。如果有的话,…

    Linux干货 2016-03-20
  • 使用iptables缓解DDOS及CC攻击

    缓解DDOS攻击 防止SYN攻击,轻量级预防 iptables -N syn-flood iptables -A INPUT -p tcp –syn -j syn-flood iptables -I syn-flood -p tcp -m limit –limit 3/s –limit-burst 6 -j RETURN iptables -A syn-fl…

    Linux干货 2015-02-09
  • 马哥教育21期网络班—第13周课程+练习—-samba和vsftp-pam

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; 3)添加samba用户gentoo,centos和u…

    Linux干货 2016-10-24
  • linux系统初识

          在完成centos7安装后,使用root登陆,查看了解当前根目录。由于root权限高,建议新增用户。执行useradd name命令。登陆后查看是否当前用户用whoami命令。     使用df命令了解系统分区情况以及显示内存free命令。   &…

    2017-07-16
  • N25期第二周作业

    1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示 ls 列出文件和目录命令 -a:显示所有档案及目录 -A:显示除隐藏文件”.”和”..”以外的所有文件 -C:多列显示结果,默认选项 -l:单列显示结果,以长格式显示目录下的内容列表 -F:在每个输出项后追加文件的类型标识符 &#822…

    Linux干货 2016-12-11