shell脚本编程之数组

bash仅支持一维数组,类型声明:

declare -i    : 表示数值

declare -a  :表示普通数组(默认,可不用声明类型)

declare -A :表示关联数组(必须声明类型,bash需4.0以上版本才支持,可通过bash –version查看版本


一、普通数组(用数字为下标)

1.1数组赋值(修改值)方式

a).单个元素赋值

a[0]=1
a[2]=2

b).一次对全部元素赋值

a=(1 2 3)

c).按索引进行赋值

a=([0]=apple [1]=banana [2]=orange)

d).命令替换

a=(/var/log/*.log)

e).用户输入

read -a array

1.2数组长度   

echo ${#array[@]}   数组的长度(建议查看方式)
echo ${#array[*]}   数组的长度

用以下示例来区分两者区别:

1.png

执行结果如下($*用双引号引起来后,所有的参数是一个串,查看所有元素时建议用$@):

2.png

1.3其它常用

echo {array[2]}         下标为2的元素值(元素从0开始计数)   
array2=(${array1[@]})   数组复制
echo ${!array[@]}       获取所有的下标


二、关联数组(可用非数字字符做下标,普通数组功能在关联数组下都可实现)

关联数组需事先声明,方法为:declare -A array

示例:

[root@localhost ~]# declare -A test
[root@localhost ~]# test=([apple]=a [banana]=b [orange]=o)
[root@localhost ~]# echo ${test[@]}
o a b
[root@localhost ~]# echo ${!test[@]}
orange apple banana
[root@localhost ~]#


三、数组切片

${array[@]:offset:number}   offset: 偏移的元素个数    number: 取出的元素的个数
${array[@]:offset}          取出偏移量后的所有元素
${array[@]}                 取出所有元素

示例:

[root@localhost ~]# array=(1 2 3)
[root@localhost ~]# echo ${array[@]}
1 2 3
[root@localhost ~]# echo ${array[@]:1}
2 3
[root@localhost ~]# echo ${array[@]:1:1}
2


四、删除数组元素

unset ARRAY[index]

示例:

[root@localhost ~]# echo ${array[@]}
1 2 3
[root@localhost ~]# unset array[1]
[root@localhost ~]# echo ${array[@]}
1 3


五、综合示例

示例1:写一个脚本,生成10个随机数,保存至数组中;而后显示数组下标为偶数的元素;

方法一:

3.png

方法二:

4.png

示例2:复制一个数组中下标为偶数的元素至一个新数组中

5.png

示例3:生成10个随机数,升序排序

6.png

示例4:打印九九乘法表

7.png

原创文章,作者:老鼠上了猫,如若转载,请注明出处:http://www.178linux.com/7109

(0)
上一篇 2015-08-24 21:33
下一篇 2015-08-24 21:44

相关推荐

  • 硬盘的读写原理

     硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等;任何一种硬盘的生产都要一定的标准;随着相应的标准的升级,硬盘生产技术也在升级;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3;其中目前咱们经常在服务器网站看到的 Ultral-160就是基于SCSI-3标准的;IDE 遵循的是ATA标准,而目前流行的SATA,…

    Linux干货 2015-04-10
  • 马哥教育网络班21期-第五周课程练习

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; grep ^[[:space:]] /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; egrep "^#[[:space:]]{1,}[[:alnum:]]…

    Linux干货 2016-08-08
  • LVM 逻辑卷管理器-缩小LV容量及快照区的建立

    LVM 逻辑卷管理器-缩小LV容量 将/dev/sdb2分区抽离出来,缩小LV容量 (1)首先查看/dev/sdb2的容量大小 [root@centos6 ~]# df -h /mnt/lvm/ Filesystem        &nbs…

    Linux干货 2016-09-19
  • LAMP搭建wordpress博客站点

    使用WordPress可以搭建功能强大的网络信息发布平台,但更多的是应用于个性化的博客。针对博客的应用,WordPress能让您省却对后台技术的担心,集中精力做好网站的内容。本文将教您如何通过LAMP搭建自己的wordpress博客站点。 LAMP听起来很高大上,其实是集中技术合起来的称呼: L:linux A:apache httpd M:mysql、ma…

    2017-06-01
  • CentOS7.3安装Jumpserver0.3.2

    CentOS7.3安装Jumpserver0.3.2 公司服务器前端增加堡垒机,选用开源的jumpserver 软件环境CentOS Linux release 7.3.1611 python 2.7.5 mysql5.7 安装git yum -y install git 克隆jumpserver # cd /opt # git clone https://…

    Linux干货 2017-07-11
  • php的serialize序列化和json性能测试

    最近需要对大数组做存储,需要在serialize序列化和json之间做了选择。因此需要做了性能测试。 在php5.2之前对数组存储的时候,大都使用serialize系列化。php5.2之后,开始内置了 JSON 的支持。 在网上看到有些资料说:json_encode和json_decode比内置的serialize和unserialize…

    Linux干货 2015-04-07

评论列表(2条)

  • stanley
    stanley 2015-08-24 21:43

    实战的案例非常有不错,很有吸引力

    • 老鼠上了猫
      老鼠上了猫 2015-08-27 19:18

      @stanley谢谢!