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
下一篇 2016-08-29

相关推荐

  • 基于ansible自动部署keepalived+nginx来调度amp

    实战作业: (1) 主/备模型的keepalived+nginx (2) httpd+php+php-mysql (3) mysql-server或mariadb-server         拥有testdb库,并允许testuser对其拥有所有权限 实验环境: 主机1:10.…

    Linux干货 2016-11-07
  • 简单易懂的CentOS启动流程

    在使用Linux操作系统时,我们只需要按下电源键,等待一会儿,登录终端就呈现在我们眼前,在这段时间内,操作系统究竟做了哪些事情? 先上一张流程梗概图,你会对启动流程有个大致的了解 启动流程详解 POST加电自检   主板在接通电源后,系统首先由POST程序来对CPU、主板、内存、硬盘子系统、显示子系统串并行接口、键盘、CD-ROm光驱等硬件进行检测 读取MB…

    Linux干货 2016-09-11
  • bash中的变量详解

        在bash中,巧妙地运用变量,能够大大减轻编程的工作量,下面让我们来详细了解一下bash的变量. bash中的变量种类:     根据变量的生效范围等标准:         本地变量:生效范围…

    Linux干货 2016-08-18
  • Mysql备份II

    Mysql备份II V.II.I单台或共用机器,数据量和访问量小50G< 1 Mysqldump(全导出,导库,导表) 锁表 如果这时有些入会锁住或者超时 2 至少停止写入 防止innodb配置还没刷到磁盘里 先flash tables /usr/local/mysql/bin/mysqladmin -S /tmp/mysql.so…

    Linux干货 2016-06-09
  • Linux基础之计算机的组成及其功能

    1、描述计算机的组成及其功能: 答:计算机由 1.1、CPU(运算器、控制器)进行逻辑运算跟控制运算,寄存器、缓存 1.2、输入单元(键盘、鼠标、手写板等)、输出单元(屏幕、打印机) 1.3、存储器(内存、硬盘) 2、按系列罗列linux的发行版,并描述不同发行版之间的联系与区别。 答:debian(ubuntu、mint、knopix)、slackware…

    2017-09-11
  • 文件、目录练习

    将/etc/issue文件的内容转换为大写保存到/tmp/issue.out文件中: 将当前系统登录用户信息转换为大写后保存至/tmp/who.out文件中: 将/root/下文件列表,显示成一行,文件名之间用空格隔开: file1文件的内容为“1 2 3 4 5 6 7 8 9 10”计算出所有数字的总和: 处理字符串“xt.,| 1 jr#!$mn 2 …

    Linux干货 2016-08-05