码迷,mamicode.com
首页 > 编程语言 > 详细

bash shell基础特性之三(数组)

时间:2015-11-17 07:03:09      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:数组、array、引用、匹配

bash shell基础特性之三(数组)

一、数组定义

   数组指连续的多个独立内存空间,每个内存空间相当于一个变量。 bash shell只支持一维数组,但参数个数没有限制。

   数组元素:数组名+索引(从0开始编号)

   声明数组:declare -a ARRAR_NAME(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组)

   关联数组:declare -A ARRAY_NAME

   数组元素的赋值:一次赋值全部元素、指定索引进行赋值、一次只赋值一个元素

   (1) array=(var1 var2 var3 ... varN)

   (2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)

   (3) array[0]=var1

      arrya[1]=var2

       ...

二、数组操作

    1、引用数组元素:${ARRAY[index]}

    2、计算数组元素个数:${#array[@]}  或者  ${#array[*]}

    注意:BASH的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。

    例子1):编写脚本array01.sh,从“标准输入”读入n次字符串,每次输入的字符串保存在数组array里

技术分享

技术分享

    例子2):array02.sh,将字符串里的字母逐个放入数组,并输出到“标准输出”

技术分享

技术分享

   3、显示整个数组或某一数组元素:

      # echo ${SEASON[*]}  或者 echo ${SEASON[@]}

      # echo ${SEASON[3]}

   4、清除指定的单个数组元素或清除整个数组:

      # unset SEASON[2]

      # unset SEASON

   5、字符串操作:

      数组元素匹配移除(以元素为单位,针对所有元素)

      #:从左向右进行最短匹配

      ##:从左向右进行最长匹配

      %:从右向左进行最短匹配

      %%:从右向左进行最长匹配

      ${#string}:返回$string的长度

      如:# netpath="sysconfig/network-scripts/ifcfg-eth"

         # echo ${#netpath}

技术分享

      ${string#*word}:word可以是任意字符,自左而右,查找sting变量所存储字符中,第一次出现的word,删除字符开头直至第一次word出现处之间的所有字符

      如:# netpath="sysconfig/network-scripts/ifcfg-eth"

          # echo ${netpath#*/}

技术分享

      ${string##*word}:word可以是任意字符,自左而右,查找sting变量所存储字符中,第一次出现的word,删除字符开头直至最后一次word出现处之间的所有字符

      如:# netpath="sysconfig/network-scripts/ifcfg-eth"

          # echo ${netpath##*/} 

技术分享                     

      ${string%word*}:word可以是任意字符,自右而左,查找sting变量所存储字符中,删除字符开头直至第一次word出现处之间的所有字符

      如:# netpath="sysconfig/network-scripts/ifcfg-eth"  

          # echo ${netpath%f*} 

技术分享

      ${string%%word*}:word可以是任意字符,自右而左,查找sting变量所存储字符中,删除字符开头直至最后一次word出现处之间的所有字符

      如:# netpath="sysconfig/network-scripts/ifcfg-eth"

          # echo ${netpath%%f*}

技术分享

      数组元素匹配替换

      /xx/yy:对每个元素只替换一次

      //xx/yy:对每个元素替换多次

      //x/:删除匹配内容

     如:#array=(abe abc abcee abcd abde)

         #echo ${array[@]/e/E} # abcee第二个e没替换 

         #echo ${array[@]//e/E} # abcee第二个e被替换  

         # echo ${array[@]//e/} # 最大匹配删除 

         # echo ${array[@]/e/} # 最小匹配删除

技术分享

     /#xx/yy front-end匹配(从左向右)

     /%xx/yy back-end匹配(从右向左)

     如:#echo ${array[@]/#a/A} # abc的a没替换 

         #echo ${array[@]/%a/A} # abc的a没替换

技术分享

    添加元素

   如:#array=(abe abc abcee abcd abde)

       #array=("${array[@]}" "bbbbb") 

       #echo ${array[@]} 

技术分享

三、练习

    1、写一个脚本array03.sh:定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字;显示每个文件的行数;

技术分享

    2、写一个脚本array04.sh,生成10个随机数,并按从小到大进行排序;

技术分享

    3、写一个脚本,能从所有同学中随机挑选一个同学回答问题;进一步地:可接受一个参数,做为要挑选的同学的个数;


本文出自 “一万小时定律” 博客,请务必保留此出处http://daisywei.blog.51cto.com/7837970/1713240

bash shell基础特性之三(数组)

标签:数组、array、引用、匹配

原文地址:http://daisywei.blog.51cto.com/7837970/1713240

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!