shell 脚本中数组的总结

描述:

  变量是存储单个元素的内存空间,而数组是多个变量的集合,是一个连续的空间;但整个数组只能有

的名字。

  数组内的数据都有指定的索引,从而找到数组内所指定的数据。索引的编号是从0开始的,依次递增(0,1,2,3,…),这种方式叫数值索引。格式为:数组名[索引];${ARRAY_NAME[INDEX]}。索引也支持自定义的格式,也被称为关联索引,在bash4.0版本后开始支持。bash的数组也支持稀疏格式,即索引不连续(0,2,4,7,8,…)

用法:

1,使用数组需事先声明,格式如下:

  declare -a ARRAY_NAME  (声明索引数组)

  declare -A ARRAY_NAME  (声明关联数组)

2,数组中元素的赋值方式:

1),一次只赋值一个元素

 ARRAY_NAME[INDEX]=value

[root@localhost ~]# weekdays[0]="Sunday"
[root@localhost ~]# echo ${weekdays[0]}
Sunday

2),一次赋值全部元素:

 ARRAY_NAME=("VAL1" "VAL2" "VAL3"…)

[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" )
[root@localhost ~]# echo ${weekdays[6]}
Saturday
[root@localhost ~]# echo ${weekdays[5]}
Friday
[root@localhost ~]# echo ${weekdays[0]}   第一个元素的索引号是从0开始编号的
Sunday

3),只赋值特定元素

 ARRAY_NAME=([0]="VAL1" [3]="VAL4"…)

[root@localhost ~]# weekdays=([0]="Sunday" [2]="Tuesday" [5]="Saturday")
[root@localhost ~]# echo ${weekdays[0]}
Sunday
[root@localhost ~]# echo ${weekdays[2]}
Tuesday
[root@localhost ~]# echo ${weekdays[5]}
Saturday

4),read -a ARRAY_NAME

[root@localhost ~]# read -a number
123 456 789

3,数组的引用

引用数组中的元素:${ARRAY_NAME[INDEX]}

注意:引用时,只给数组名,表示引用下标为0的元素

   ${ARRY_NAME[*]}

   ${ARRY_NAME[@]}

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

   ${#ARRY_NAME[*]}

   ${#ARRY_NAME[@]}

[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday")
[root@localhost ~]# echo ${weekdays[0]}
Sunday
[root@localhost ~]# echo ${weekdays[*]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${weekdays[@]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${#weekdays[@]}
3
[root@localhost ~]# echo ${#weekdays[*]}
3

示例:

1,随机生成10个数,并找出其中的最大值和最小值

[root@localhost ~]# cat sum.sh
#!/bin/bash
declare -a rand
declare -i max
declare -i min
for i in {0..9};do
    rand[$i]=$RANDOM
    echo ${rand[$i]}
    if [ $i -eq 0 ];then
     max=${rand[$i]}
     min=${rand[$i]}
    else
      [ "$max" -lt "${rand[$i]}" ] && max=${rand[$i]}
      [ "$min" -gt "${rand[$i]}" ] && min=${rand[$i]}
    fi
done
echo "MAX:$max"
echo "MIN:$min"
[root@localhost ~]# bash sum.sh
21586
1730
19008
16138
17576
3909
206
27706
3824
11997
MAX:27706
MIN:206

处理数组数据:

  语法

       描述

${!array[*]}

列出所有元素所对应的索引号
${!array[@]} 列出所有元素所对应的索引号
${array[*]} 列出关联数组的所有元素
${array[@]} 列出关联数组的所有元素
${#[array[*]} 关联数组的长度(元素个数)
${#[array[@]} 关联数组的长度(元素个数)

示例:

设置数组:

[root@localhost ~]# weekdays=("Sunday" "Tuesday" "Saturday")

1,列出数组中所有元素所对应的索引号

[root@localhost ~]# echo ${!weekdays[*]}
0 1 2
[root@localhost ~]# echo ${!weekdays[@]}
0 1 2

2,列出数组中所有的元素

[root@localhost ~]# echo ${weekdays[@]}
Sunday Tuesday Saturday
[root@localhost ~]# echo ${weekdays[*]}
Sunday Tuesday Saturda

3,显示数组中元素的个数

[root@localhost ~]# echo ${#weekdays[*]}
3
[root@localhost ~]# echo ${#weekdays[@]}
3

数组切片:

格式为:${ARRY_NAME[@]:offset:number}

       offset:要路过的元素的个数

       number:要取出的元素个数

     ${ARRAY_NAME[@]:offset}:取偏移量之后的所有元素

示例:

[root@localhost ~]# weekdays=("Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday")
[root@localhost ~]# echo ${weekdays[@]:3:2}
Wednesday Thursday
[root@localhost ~]# echo ${weekdays[@]:2}
Tuesday Wednesday Thursday Friday Saturday

向非稀疏格式数组中追加元素:

    ARRAY_NAME[${#ARRAY_NAME[*]}]=

[root@localhost ~]# number=(2 4 6 8)
[root@localhost ~]# echo ${number[*]}
2 4 6 8
[root@localhost ~]# number[${#number[*]}]=10
[root@localhost ~]# echo ${number[*]}
2 4 6 8 10

删除数组中的某元素:

    unset ARRAY[INDEX]

[root@localhost ~]# unset number[3]
[root@localhost ~]# echo ${number[*]}
2 4 6 10

关联数组

  declare -A ARRAY_NAME

  ARRAY_NAME=([index_name1]="value1" [index_name2]="value2"…)

[root@localhost ~]# declare -A num
[root@localhost ~]# num=([jishu]="1 3 5" [oushu]="2 4 6 8")
[root@localhost ~]# echo ${num[jishu]}
1 3 5
[root@localhost ~]# echo ${num[oushu]}
2 4 6 8

示例:

输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序

[root@localhost ~]# cat maopao.sh
#!/bin/bash
#sorting following array
echo "Please input a number list: "
read -a arr
for ((i=0;i<${#arr[@]};i++));do
   for ((j=${#arr[@]}-1;j>i;j--));do
#echo $j
 if [[ ${arr[j]} -lt ${arr[j-1]} ]];then
    t=${arr[j]}
    arr[j]=${arr[j-1]}
    arr[j-1]=$t
 fi
    done
done 
echo "after sorting: "
echo ${arr[@]}
[root@localhost ~]# bash maopao.sh 
Please input a number list: 
5 1 4 2 3 0
after sorting: 
0 1 2 3 4 5

原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/41225

(1)
pingskypingsky
上一篇 2016-08-29 08:45
下一篇 2016-08-29 08:45

相关推荐

  • Linux基本知识之Vim编辑器

    vim文本编辑器:    vim是Linux系统上的最著名的文本/代码编辑器,也是早年的vi编辑器的加强版,而gVim则是其windows版。它的最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门变得困难,但上手之后键盘流的各种巧妙组合操作却能带来极大幅度的效率的提升。 (1)打开文件与关闭文件:     …

    Linux干货 2016-08-10
  • 管道、重定向和用户管理练习

    前面一章学习了硬链接和软链接,回顾上一章节内容:    硬链接:在inode表中记录一个条目,所有的元数据和原始文件元数据相同。        ·相当于两个名字。        ·删除原始文件,另一个条目也能够…

    Linux干货 2016-08-04
  • N26-第八周作业-邢岩

    马哥门徒-N26-邢岩 1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;      在线的主机使用绿色显示;      不在线的主机使用红色显示; #!/bin/bash # Author: jeque# Des…

    2017-03-24
  • Linux交换分区的创建和调整

    概述 本文对swap进行简要介绍,以及系统安装后(在运行中)如何建立或调整swap分区。 文中演示环境为: 什么是swap space? 交换分区,即swap space。它将某段磁盘空间独立划分出来,当物理内存不够的情况下,系统先把物理内存中暂时不用的数据,暂存到交换空间,腾出内存空间来,以保证程序的运行;当swap中存储的页面被访问到时,系统会将其重新载…

    Linux干货 2016-08-30
  • tomcat之-从AT到Cluster

    本文导航 一、    LAMT搭建以及部署应用        1、LAMT部署                   (1)、安装Apache     …

    2017-02-13
  • 2016/10/26作业:用户和组的相关配置文件

    linux系统是通过文件来保存配置的,其中关于用户和组的配置文件包括以下几个: /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/login.defs /etc/default/useradd /etc/passwd 存放用户信息的配置文件,其基本格式如下 root:x:0:0:root:/root:/…

    Linux干货 2016-10-26