数组

数组

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

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

数组名和索引

索引:编号从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

相关推荐

  • mysql复制与备份

    备份策略: 完全+差异+binlog 完全+增量+binlog binlog最好能实时备份到另一个节点上。 完全备份,多久一次? 数据变化量:有20%,建议使用完全备份。 可用的备份存储空间: 数据变化量很大,可以每天做一个完全备份,每周做一次增量备份。 数据变化量不大,可以每月做一次完全备份,每天做一次增量或者差异。 数据 备份工具: mysqldump:…

    Linux干货 2016-12-05
  • 推荐-Centos的网络配置命令和文件

    一、ifcongfig     Centos6之前最常用的配置网络命令就是ifconfig,使用ifconfig命令时最好切换到root用户的身份     1、直接使用ifconfig可以查看当前配置的网络设备的信息      &…

    Linux干货 2016-03-27
  • 如何学好C语言

    有人在酷壳的留言版上询问下面的问题 keep_walker : 今天晚上我看到这篇文章。 http://programmers.stackexchange.com/questions/62502/small-c-projects 我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢! 我相信,这可能是很多朋友的问题,我以前…

    Linux干货 2016-08-15
  • CentOS 5和6的启动流程

    Linux: kernel+rootfs  kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能 rootfs: glibc 库:函数集合, function, 调用接口 过程调用:procedure 函数调用:function 程序  内核设计流派: 单内核设计:Linux 把所有功能集成于同一个程序; 微内核设计…

    Linux干货 2016-08-23
  • linux内核及系统启动流程

    Linux内核 内核概述 如图,最上面是用户空间(User Space),是用户程序执行的地方;用户空间之下是内核空间(Kernel Space),内核位于此。基于此,GUN C Library(glibc)提供了连接内核的系统调用接口,还提供了在用户空间应用程序和内核之间进行转换的机制,因为内核空间和用户空间的应用程序使用的是不同的保护地址空间。用户空间的…

    Linux干货 2016-08-08
  • ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能

    ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能 本文是继上一篇文章“CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}”的补充,上篇文章http://www.178linux.com/38812主要介绍了yum安装软件的方法以及归纳了详细的yum命令。本文继续介绍基于本地file、远程…

    Linux干货 2016-08-24