ITPUX技术网

交流 . 资讯 . 分享
Make progress together!
Linux操作系统下Oracle11g R2 RAC 安装配置教程
Oracle数据库培训-备份恢复-性能优化-集群容灾
Oracle数据库DBA高级工程师培训视频

bash数组

内容发布:baby60142840| 发布时间:2017-2-28 10:58:00
bash中的数组仅支持一维数组,数组定义好后数组的长度也可以动态地改变。
bash中的数组有两种,一种是常见的索引数组,另一种是bash4.0后支持的关联数组。
先简单谈一下关联数组:
declare -A array            #申明关联数组,如果要把array当做关联数组使用,这个必须申明
array[hello]=red;array[hi]=yellow;array[honey]=green.......
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em][size=1em][baby@beibei ~]$ declare -A array
[size=1em][baby@beibei ~]$ array[hello]=red
[size=1em][baby@beibei ~]$ array[hi]=yellow
[size=1em][baby@beibei ~]$ echo ${array[hello]}
[size=1em]red
[size=1em][baby@beibei ~]$ echo ${array[hi]}
[size=1em]yellow



关联数组用的不多,下面介绍我们常用的

申明数组
declare -a array

数组的赋值
1)一次对一个元素赋值:
       array[0]=red
       array[1]=yellow
       ......
   2)一次对所有元素进行赋值
      array=(red yellow green blue)
   3)按索引赋值
      array=([2]=green [1]=red [3]=yellow [0]=blue)
   4)命令替换
      logs=(`ls /var/log*.log`)或者logs=(/var/log/*.log)
      colors=(`cat color.text`) 直接从文件中读取,每一行为数组的一个元素
   5)用户输入
      read -a array
[size=1em]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em][size=1em][baby@beibei tmp]$ read -a color
[size=1em]blue red black white
[size=1em][baby@beibei tmp]$ echo ${color[@]}     #输出所有元素
[size=1em]blue red black white




数组的访问
array[index]    例:echo ${color[2]}

获取所有数组
    1)${array[@]}: 每个参数是一个独立的串
    2)${array
  • }: 所有参数是一个串
  •     下面是一个脚本的代码:
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em]5

    [size=1em]6

    [size=1em]7

    [size=1em]8

    [size=1em]9

    [size=1em][size=1em]#!/bin/bash
    [size=1em]declare -a color
    [size=1em]color=(red blue yellow black white green)
    [size=1em]for i in "${color[@]}"; do
    [size=1em] echo $i
    [size=1em]done
    [size=1em]for i in "${color
  • }"; do
    [size=1em] echo $i
    [size=1em]done



  •    以下是执行结果:
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em]5

    [size=1em]6

    [size=1em]7

    [size=1em]8

    [size=1em][size=1em][baby@beibei bashtest]$ ./arraytest.sh
    [size=1em]red
    [size=1em]blue
    [size=1em]yellow
    [size=1em]black
    [size=1em]white
    [size=1em]green
    [size=1em]red blue yellow black white green



    如此可以看出${array[@]}与${array
  • }的区别,一个是一整个字符串,一个是每个单独的元素是一个字符串。当然如果把这里的引号去掉"${color
  • }"。for循环也可以正确输出其中的每一个元素。

  • 数组的长度
        1)${#ARRAY
  • }
  •     2)${#ARRAY[@]}
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em][size=1em][baby@beibei tmp]$ array=(red yellow green blue)
    [size=1em][baby@beibei tmp]$ echo ${#array
  • }
    [size=1em]4



  • [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em][size=1em][baby@beibei tmp]$ array=([2]=green [5]=yellow [0]=blue)
    [size=1em][baby@beibei tmp]$ echo ${#array[@]}
    [size=1em]3                                        #没有定义的下标数组不会占用数组中元素的个数




    从数组中挑选部分元素
    ${ARRAY[@]:offset:number}
      offset: 偏移的元素个数
      number: 取出的元素的个数
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em][size=1em][baby@beibei tmp]$ array=(red yellow green blue)
    [size=1em][baby@beibei tmp]$ echo ${array[@]:1:2}
    [size=1em]yellow green



    取出偏移量后的所有元素
    ${ARRAY[@]:offset}
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em][size=1em][baby@beibei tmp]$ echo ${color[@]:1}
    [size=1em]yellow green blue




    连接两个数组
    array=(${array1[@]} ${array2[@]})
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em]5

    [size=1em][size=1em][baby@beibei tmp]$ number=(3 5 1 9 7)
    [size=1em][baby@beibei tmp]$ color=(blue grey white red)
    [size=1em][baby@beibei tmp]$ array=(${number[@]} ${color[@]})
    [size=1em][baby@beibei tmp]$ echo ${array[@]}
    [size=1em]3 5 1 9 7 blue grey white red




    数组元素的删除与替换
    array=(${array[@]/pattern1/string})
    pattern可以是一个字符串,也可以是通配符,被匹配到的字符将被替换成string,若string不写,则匹配到的元素将被删除

    元素删除:
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em]5

    [size=1em]6

    [size=1em][size=1em][baby@beibei tmp]$ color=(blue1 blue2 red green)
    [size=1em][baby@beibei tmp]$ echo ${color[@]}
    [size=1em]blue1 blue2 red green
    [size=1em][baby@beibei tmp]$ color=(${color[@]/blue*/})
    [size=1em][baby@beibei tmp]$ echo ${color[@]}
    [size=1em]red green



    元素替换:
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em][size=1em][baby@beibei tmp]$ color=(blue1 blue2 red green)
    [size=1em][baby@beibei tmp]$ color=(${color[@]/blue*/white})
    [size=1em][baby@beibei tmp]$ echo ${color[@]}
    [size=1em]white white red green



    当然元素的删除也可以这样:
    unset ARRAY[index]
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em][size=1em][baby@beibei tmp]$ color=(blue1 blue2 red green)
    [size=1em][baby@beibei tmp]$ unset color[1]
    [size=1em][baby@beibei tmp]$ echo ${color[@]}
    [size=1em]blue1 red green




    遍历数组
    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em]5

    [size=1em]6

    [size=1em][size=1em]#!/bin/bash
    [size=1em]color=(red green yellow white black)
    [size=1em]for i in ${color[@]}; do
    [size=1em] echo $i
    [size=1em]done
    [size=1em]exit 0



    [size=1em]
    [size=1em]1

    [size=1em]2

    [size=1em]3

    [size=1em]4

    [size=1em]5

    [size=1em][size=1em]color=(red green yellow white black)
    [size=1em]for((i=0;i<${#color[@]};i++)); do
    [size=1em] echo ${color[$i]}
    [size=1em]done
    [size=1em]exit 0



    .......



    上一篇:centos 7 系统与centos6系统不同的地方!!!
    下一篇:Linux 查看系统硬件信息
    回复

    使用道具 举报

    1框架
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表