美文网首页
shell数组使用

shell数组使用

作者: mrknowledge | 来源:发表于2021-04-28 11:19 被阅读0次

    #读配置文件初始化全局变量

    while read line

    do    

        if [ -z "$line" ]

        then

            continue

        else

            #在字符串中查找"="字符

            pos=`expr index "$line" "="`

            #截取子串

            str=${line:0:pos}

            if [ $str = "hdfs=" ]

            then

                #去掉配置记录的前缀

                HDFS=`echo $line | sed 's/hdfs=//'`

            elif [ $str = "hive=" ]

            then

                HIVE=`echo $line | sed 's/hive=//'`

            elif [ $str = "hivePath=" ]

            then

                hivePath=`echo $line | sed 's/input=//'`

            elif [ $str = "input=" ]

            then

                remotePay=`echo $line | sed 's/input=//'`

            elif [ $str = "output=" ]

            then

                localPay=`echo $line | sed 's/output=//'`

            elif [ $str = "build=" ]

            then

                buildList=(`echo $line | sed 's/build=//'`)

            elif [ $str = "search1=" ]

            then

                searchList1=(`echo $line | sed 's/search1=//'`)

            else

                searchList2=(`echo $line | sed 's/search2=//'`)

            fi

        fi

    done < $config

    上面脚本处理的配置文件如下:

    hdfs=hdfs://hdpnn.cm3:9000

    hive=hive -u root -p root -e

    input=/group/input

    output=/group/output

    build=search71d.cm3 search40c.cm3 search43c.cm3

    search1=search40d.cm3 search41d.cm3 search42d.cm3

    search2=search43d.cm3 search44d.cm3 search45d.cm3

    总结一下shell数组的使用方法吧。

    1、初始化数组,元素之间只能用空格分隔。

    arr=(1 2 3 4)

    2、取数组元素,通过下标访问。

    let i=0

    ${arr[$i]}

    3、插入数据

    arr[6]=8

    数组将变成(1 2 3 4 8),shell数组其实有点map的感觉,这个’8′只能通过${arr[6]}得到。

    4、取数组长度和元素长度。

    $arr[@]表示数组所有的元素,加上#表示长度,所以下面len为数组中元素的个数。

    len=${#arr[@]}

    还可以获得某个元素的长度,只需将’@'替换成该元素的下标就好了,如下所示:

    len=${#arr[3]}

    5、遍历数组

    for a in ${arr[@]}

    do

        #do something

    done

    还有几点要注意的。因为shell的类型比较乱。shell不支持export一个数组,所以只能将其作为一

    个字符串来export,使用${arr[0]}可以得到字符串的所有内容。如果在子脚本中需要遍历该数

    组,使用下面两种方法都可以:

    for e in ${arr[@]}

    do

        #do something

    done

    #第二种方法应该是更正确的方法

    for e in arr

    do

        #do something

    done

    如果有几个数组,可以象下面这样遍历之:

    for server in ${rank1[@]} ${rank2[@]} ${rank3[@]}

    do

        #do something

    done

    相关文章

      网友评论

          本文标题:shell数组使用

          本文链接:https://www.haomeiwen.com/subject/ohyurltx.html