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