zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    20160205
    20151120
    20151023
    20151023
    20140207
    yum工具介绍
    Linux程序包管理
    Linux任务计划、周期性任务执行
    10 压缩和解压缩工具和bash脚本编程
    9 btrfs文件系统
  • 原文地址:https://www.cnblogs.com/nihaorz/p/14472636.html
Copyright © 2011-2022 走看看