shell编程--read读到数组

声明:

本博客欢迎转发,但请保留原作者信息!

新浪微博:@孔令贤HW

博客地址:http://blog.csdn.net/lynn_kong

内容系本人学习、研究和总结,如有雷同,实属荣幸!


看了一个老外的自动化安装OpenStack的脚本,里面有些语法对我来说比较高级,比如下面这个函数:

function setconf() {
    local i=1
    for element in "$@"
    do
        IFS=':', read -ra array <<< "$element"
        if [[ "${array[0]}" = "infile" ]]; then
            local input=${array[1]}
            continue
        elif [[ "${array[0]}" = "outfile" ]]; then
            local output=${array[1]}
            continue
        fi
        para[$i]="-e s#${array[0]}#${array[1]}#g "
        para+=${para[$i]}
        i=$(($i + 1))
    done

    if [[ "$output" ]]; then
        cp $output ${output}.org
        sed $para $input > $output
    else
        cp $input ${input}.org
        sed -i $para $input
    fi
}
这里主要是read的用法:

-r:不允许反斜杠来转义任何字符

-a array:把输入内容按分隔符(空格或者跳格之类)分配给数组,连续的空格也算为1个分割。输入后,数组规格跟c语言一样,用var[n]的格式表示,下标从0开始,直接echo $var 的效果等于echo ${var[0]}。当echo 数组带下标的时候,记得加{}表达,比如echo ${a[1]}。


该函数使用示例:

    setconf infile:$BASE_DIR/conf/etc.keystone/keystone.conf \
        outfile:/etc/keystone/keystone.conf \
        "<KEYSTONE_IP>:${KEYSTONE_IP}" \
        "<DB_KEYSTONE_USER>:${DB_KEYSTONE_USER}" \
        "<DB_KEYSTONE_PASS>:${DB_KEYSTONE_PASS}"

你可能感兴趣的:(shell编程--read读到数组)