shell 中以某一个变量作为 key 取其对应的环境变量值如何实现

`echo ${!env_name}` 或 $(eval echo '$'$env_name)

 

需求如下:

APP_ENVS 变量由逗号分割的英文字符串组成,程序对 APP_ENVS 变量的值以逗号分割进行遍历

每次遍历的时候定义变量 env_name,需要判断以 env_name 命名的环境变量是否存在,存在则输出该环境变量的值,不存在则赋值 flag 为 1

遍历结束后判断 flag 为 1 则退出程序

 

代码实现:

# 定义打印函数
println() {
    send=`date '+%Y-%m-%d %H:%M:%S'`
    echo "$send $1"
}

# 配置文件更新
confUpdate() {

eval "cat <<EOF
$(< /opt/app_conf/template/application-test.properties)
EOF
"> /srv/tomcat8/webapps/ROOT/WEB-INF/classes/application-test.properties

eval "cat <<EOF
$(< /opt/app_conf/template/usersystem.properties)
EOF
"> /srv/tomcat8/webapps/ROOT/WEB-INF/classes/usersystem.properties

}

# APP_ENVS为待检测的环境变量,以英文逗号间隔隔开
if [ ${APP_ENVS} ] ; then
    println "本程序依赖以下环境变量: ${APP_ENVS}"
    # 环境变量检测标识,检测不通过则赋值为1
    flag=0

    env_names=(${APP_ENVS//,/ })
    for env_name in ${env_names[@]}
    do
        env_value=$(eval echo '$'$env_name)
        println "$env_name: $env_value"
        # TODO
        if [ -z $env_value ] ; then
            println "缺少环境变量: $env_name"
            flag=1
        fi
    done

    if [ $flag -eq 1 ] ; then
        println "程序退出"
        exit 1
    fi

    println "环境变量检测通过"
    confUpdate
    
fi

 

链接地址:shell 中以某一个变量作为 key 取其对应的环境变量值如何实现? - V2EX

posted @ 2021-03-03 09:32  Nihaorz  阅读(617)  评论(0编辑  收藏  举报