Bash encontrará se todas as variáveis de env são declaradas, por nome de variável

1

Estou tendo problemas com o script abaixo. Deve sair apenas se não houver uma variável definida por esse nome.

#!/bin/bash
set -e

echo 'START: env_vars_config'

required_var(){
  VARIABLE=$1
  echo "detecting if $VARIABLE exists"
  echo ${!VARIABLE}
  if [ -z ${!VARIABLE}+x ]; then
    echo "${VARIABLE} was defined"
  else
    echo "Need to set environment var $VARIABLE" && exit 1;
  fi
}

# these are required variables to deploy
required_var MONGO_URL
required_var AWS_REGION
required_var AUTOSCALING_GROUP_NAME
required_var LATEST_STABLE_COMMIT
required_var ENV_FILE
required_var DEPLOY_FILE
required_var POSTMAN_ENVIRONMENT_UID
required_var POSTMAN_COLLECTION_UID
required_var POSTMAN_API_KEY
required_var MANDRILL_KEY
required_var SERVER_SECRET
required_var S3_BUCKET
required_var ELASTIC_URL
required_var ELASTIC_PASSWORD
required_var ELASTIC_PREFIX


echo 'END: env_vars_config'

Neste momento, este script sempre sai na primeira verificação. MONGO_URL No entanto, sei que isso é um conjunto de variáveis e é uma string.

  • Como seria a verificação de unset ?
  • Como seria a verificação de unset ou empty string ?

FIXO 2 questões, em primeiro lugar o símbolo + no final da instrução if era um erro de digitação. Em segundo lugar, tive a ordem da declaração if para trás.

  if [ -z "${!VARIABLE}" ]; then
    echo "Need to set environment var $VARIABLE" && exit 1;
  else
    echo "${VARIABLE} was defined"
  fi
    
por LessQuesar 18.10.2017 / 12:45

1 resposta

3

O problema é:

if [ -z ${!VARIABLE}+x ]; then
    echo "${VARIABLE} was defined"
else
    echo "Need to set environment var $VARIABLE" && exit 1;
fi

-z "string" é verdadeiro se a string estiver vazia.

+x é um erro de digitação? Você não precisa disso.

Condição de trabalho:

if [ -z "${!VARIABLE}" ]; then
    echo "Need to set environment var $VARIABLE" && exit 1;
else
    echo "${VARIABLE} was defined"
fi
    
por 18.10.2017 / 14:33

Tags