#! /bin/bash
#--------------------------------------------------------------------#
#       GSI Evaluation System (EVAL)  - GDAD/CPTEC/INPE - 2017       #
#--------------------------------------------------------------------#
#BOP
#
# !DESCRIPTION:
# Script para instalar a estrutura basica de avaliacão do GSI 
# em suas diversas modalidades usandas no CPTEC. Esse sistema organiza
# o ambiente para uma avaliacão completa dos aspectos envolvidos na 
# assimilacao de dados, usando para isso os sistemas disponiveis 
# em diferentes protocolos de avaliacão. Para mais informacões, veja o
# arquivo eval/README.
#
# !INTERFACE:
#      ./config_eval.sh <opcao> <GSI_system> <EXPE>
#
# !INPUT PARAMETERS:
#  Opcoes..: <opcao> vars_export -> faz export das variaveis de ambiente do EVAL
#                    configurar  -> configura o EVAL (cria links e pastas)
#                    compilar    -> compila o STAT (cria executaveis)
#                    ajuda       -> mostra esta ajuda
#
#       <GSI_system> SMG        -> Versao trunk do SMG (Sistema de Modelagem Global) com BAM
#                    RMS        -> Versao trunk do RMS (Sistema de Modelagem Regional) com WRF
#                    SMG_V0.0.0 -> Versao inicial V0.0.0 do SMG no ramo TAG. 
#
#             <EXPE> Nome de indentificacao do experimento em uso do sistema. Esse label é usado para
#                    organizar a saida dos dados evitando sobreescrever resultados.
#                    Caso nao seja informado, sera usado o padrão EXPE.
#
#  Exemplos: ./config_eval.sh vars_export RMS         EXPE
#            ./config_eval.sh configurar  SMG         TESTCASE 
#            ./config_eval.sh compilar    SMG_V0.0.0  EXPE01
#            ./config_eval.sh testcase    RMS         EXPE
#            ./config_eval.sh ajuda       RMS_V2.0    EXPE02
# 
# !REVISION HISTORY:
#
# 02 Maio de 2017 - L. F. Sapucci - Versao modelo (dummy) apenas com a estrutura e componentes basicos.  
# 17 Maio de 2017 - L. F. Sapucci - Versão inicial com os campos de umidade negativa calculado para todo o testcase.
# 31 Maio de 2017 - L. F. Sapucci - Versão mais completa com a organizacao dos dados no FTP/PUBLIC do tupa. 
#
# !REMARKS:
# - Como é o padrão dos sistemas de modelagem da DMD os label do <GSI_system> iniciam-se 
#   por tres letras, com as quais se monta o arquivo de configuracao do sistema que organiza as 
#   varaiveis de ambiente do sistema hospedeiro do eval. 
#
# !TODO:
# - Modificar os scripts para amprimorar todo o pacote de avaliacao do impacto para um processo 
#   unificado permitindo execusoes automaticas de avaliacao pelo SVN;
#
# !BUGS:
#   Nenhum ate o momento.
#
#EOP  
#--------------------------------------------------------------------#
#BOC

# Descomentar para debugar
#set -o xtrace

# Variaveis principais
vars_export(){

# Nome do sistema com a versao do GSI (por exemplo, SMG->BAM ou SMR->BRAMS ou RMS->WRF) via linha de comando
  export nome_sys=${1}

# Verifica o argumento do label do experimento se nao informado, usa o padrão EXPE
  if [ -z "${2}" ]
  then
    export EXPE="EXPE"
  else
    export EXPE=${2}
  fi

  export nome_syslowc=$(echo ${nome_sys} | tr [:upper:] [:lower:])

# Caminho padrao no sistema
  case $HOSTNAME in
    (eslogin09) echo "TUPA";
      export usuario=${USER} ;             # Padrao do Sistema
      export HOME2=${SUBMIT_HOME} ;         # Padrao do Sistema Tupa, caso nao esteja na tupa mude o caminho
      export SUBMIT_HOME=${SUBMIT_HOME} ;  # Padrao do Sistema Tupa, caso nao esteja na tupa mude o caminho
      export WORK_HOME=${WORK_HOME} ;;      # Padrao do Sistema Tupa, caso nao esteja na tupa mude o caminho
    (itapemirim) echo  "ITAP";
      export usuario=${USER} ;             # Padrao do Sistema
      export HOME2=/home/${usuario} ;         # Padrao do Sistema Itapemirim
      export SUBMIT_HOME=/home/${usuario} ;  # Padrao do Sistema Itapemirim
      export WORK_HOME=/dados/das/poper ;;    # Padrao do Sistema Itapemirim.
  esac
# Raiz do sistema onde o GSI esta instalado
  export home_sys=${SUBMIT_HOME}/${nome_sys}
  export work_sys=${WORK_HOME}/${nome_sys}

# Setando caminhos de aplicativos no SUPER
 # case $HOSTNAME in 
 #   (eslogin09) export gnuplot=/scratchin/grupos/das/projetos/gdad/public/gnuplot5/bin/gnuplot ;;

# Raiz dos pacotes de evaluation
  export eval_home=${home_sys}/evalu
  export eval_CNT=${eval_home}/dataCNT
  export eval_work=${work_sys}/evalu/${EXPE}
  # Ajuste temorario para evitar problemas com a falta do FTP/tupa no NetApp
  export eval_page=/share/das/dist/${USER}/${nome_sys}/evalu/${EXPE}  

# Raiz dos dados do public do eval
  # case $HOSTNAME in
  #  (eslogin09) export eval_public=/scratchin/grupos/assim_dados/home/gdad/public/evalu ;;
  #  (itapemirim) export eval_public=/dados/das/poper/GSI_XC50 ;;
  export eval_public=/dados/das/poper/GSI_XC50
# Diretorios do pacote de estatisticas do GSI
  export stat_home=${eval_home}/stat
  export stat_CNT=${eval_CNT}/stat
  export stat_run=${stat_home}/run
  export stat_src=${stat_home}/src
  export stat_bin=${stat_home}/bin
  export stat_util=${stat_home}/util
  export stat_page=${eval_page}/stat

# Endereco do inctime no stat
  export inctime=${stat_bin}/inctime

# Diretorios de saida de dados
  export stat_work=${eval_work}/stat
  export stat_tabe=${stat_work}/tabela
  export stat_figu=${stat_work}/figura
  export stat_bina=${stat_work}/binary
  export stat_logs=${stat_work}/logfile

# Raiz dos pacotes de diagnosticos do GSI
  export diag_home=${eval_home}/diag
  export diag_CNT=${eval_CNT}/diag
  export diag_work=${eval_work}/diag
  export diag_page=${eval_page}/diag
  
# Diretorios principais dos pacotes de diagnostico
  export adjBerr_home=${diag_home}/adjBerr
  export dryMcon_home=${diag_home}/dryMcon
  export humNphy_home=${diag_home}/humNphy
  export minFcos_home=${diag_home}/minFcos
  export obsConv_home=${diag_home}/obsConv
  export obsRadi_home=${diag_home}/obsRadi
  export obsGnss_home=${diag_home}/obsGnss
  export obsSatw_home=${diag_home}/obsSatw

# Diretorios principais dos dados de controle dos pacotes de diagnostico
  export adjBerr_CNT=${diag_CNT}/adjBerr
  export dryMcon_CNT=${diag_CNT}/dryMcon
  export humNphy_CNT=${diag_CNT}/humNphy
  export minFcos_CNT=${diag_CNT}/minFcos
  export obsConv_CNT=${diag_CNT}/obsConv
  export obsRadi_CNT=${diag_CNT}/obsRadi
  export obsGnss_CNT=${diag_CNT}/obsGnss
  export obsSatw_CNT=${diag_CNT}/obsSatw

# Diretorios principais dos resultados dos pacotes de diagnostico
  export adjBerr_work=${diag_work}/adjBerr
  export dryMcon_work=${diag_work}/dryMcon
  export humNphy_work=${diag_work}/humNphy
  export minFcos_work=${diag_work}/minFcos
  export obsConv_work=${diag_work}/obsConv
  export obsRadi_work=${diag_work}/obsRadi
  export obsGnss_work=${diag_work}/obsGnss
  export obsSatw_work=${diag_work}/obsSatw

# Diretorios principais dos pacotes de diagnostico para PAGE FTP/PUBLIC
  export adjBerr_page=${diag_page}/adjBerr
  export dryMcon_page=${diag_page}/dryMcon
  export humNphy_page=${diag_page}/humNphy
  export minFcos_page=${diag_page}/minFcos
  export obsConv_page=${diag_page}/obsConv
  export obsRadi_page=${diag_page}/obsRadi
  export obsGnss_page=${diag_page}/obsGnss
  export obsSatw_page=${diag_page}/obsSatw

# Diretorios de saida de dados da minimizacao da funcao custo
  export minFcos_figu=${minFcos_work}/figura
  export minFcos_tabe=${minFcos_work}/tabela

  if [ 'x'$1 != 'xsilent' ]; then 

   echo -e ""
   echo -e "\033[36;1m Variaveis do eval Carregadas com Sucesso! \033[m \033[m"
   echo -e "\033[34;1m > \$EVAL_HOME: \033[36;1m${eval_home}\033[m \033[m"
   echo -e "\033[34;1m > \$EVAL_WORK: \033[36;1m${eval_work}\033[m \033[m" 
   echo -e ""
 
  fi
  
}

# Funcao ajuda
ajuda(){

  echo -e ""
  echo -e " Conteudo: O eval contem o pacote de estatistica e um conjunto de "
  echo -e "           ferramentas de diagnostico da assimilacao usando o GSI"
  echo -e ""
  echo -e " Uso.....: ./config_eval.sh <opcao> <GSI_system> <EXPE>"
  echo -e ""
  echo -e " Opcoes..: <opcao> configurar -> configura o eval no systema com o GSI instalado (cria links e pastas)"
  echo -e "                   compilar -> compila o pacote de estatistica do GSI (cria executaveis)"
  echo -e "                   testcase -> descompacta os arquivos do TestCase padrão do sistema"
  echo -e "                   ajuda -> mostra esta ajuda"
  echo -e ""
  echo -e " Sistema usando o GSI..: <GSI_system> SMG -> Versao trunk do SMG (Sistema de modelagem Global) com BAM"
  echo -e "                                      RMS -> Versao trunk do RMS (Sistema de modelagem regional) com WRF"
  echo -e "                                      SMG_V0.0.0 -> Versao inicial V0.0.0 do SMG no ramo TAG. "
  echo -e ""
  echo -e " Experimento Label..: <EXPE> Nome de indentificacao do experimento em uso do sistema. "
  echo -e "                             Esse label é usado para organizar a saida dos dados evitando"
  echo -e "                             sobreescrever resultados melhor controlando."
  echo -e "                             Caso nao setado usa o padrão EXPE."
  echo -e ""
  echo -e " Exemplos: ./config_eval.sh vars_export RMS         EXPE"
  echo -e "           ./config_eval.sh configurar  SMG         TESTCASE "
  echo -e "           ./config_eval.sh compilar    SMG_V0.0.0  EXPE01"
  echo -e "           ./config_eval.sh testcase    RMS         EXPE"
  echo -e "           ./config_eval.sh ajuda       RMS_V2.0    EXPE02"
  echo -e ""
  echo -e " Testcase padrão: ./config_eval.sh configurar SMG EXPE"
  echo -e "                  ./config_eval.sh compilar   SMG EXPE"
  echo -e "                  ./config_eval.sh testcase   SMG EXPE"
  echo -e "                  ./config_eval.sh ajuda      SMG EXPE"
  echo -e ""

}


# Funcao configurar
configurar(){

# Exportando variaveis do eval
  vars_export ${1} ${2}

# Exportanto varaiveis do sistema em avaliacao
  #source ${home_sys}/config_${nome_syslowc:0:3}.ksh vars_export ${nome_sys}

  echo -e ""
  echo -e "\033[34;1m > Bem vindo ao sistema de dignostico do \033[36;1mGSI\033[m \033[m"
  echo -e ""
  echo -e "\033[34;1m > O configurador do EVAL ira criar pastas para avaliacao no sistema \033[36;1m${nome_sys}\033[m \033[m"
  echo -e "\033[34;1m   no disco scratchout (\$EVAL WORK). \033[m" 
  echo -e "\033[34;1m > \$EVAL_HOME: \033[36;1m${eval_home}\033[m \033[m"
  echo -e "\033[34;1m > \$EVAL_WORK: \033[36;1m${eval_work}\033[m \033[m" 
  echo -e ""
  read -p "$(echo -e "\033[34;1m > Deseja continuar? (S/N) \033[m") " -n2 resposta

  if [[ ${resposta} = "S" || ${resposta} = "s" ]]
  then

# Mensagem ao usuario
  echo -e ""
  echo -e "\033[34;1m > Configurando o EVAL ... \033[m"
  echo -e ""

# Criando estrutura de diretorios do eval do scratchout
  if test ! -s ${eval_work}; then mkdir -p ${eval_work}; fi
  if test ! -s ${stat_work}; then mkdir -p ${stat_work}; fi
  if test ! -s ${diag_work}; then mkdir -p ${diag_work}; fi

# cria um link do eval/utils/gsiDiagEval.py nos protocolos obs
ln -fs ${eval_home}/utils/gsiDiagEval.py ${obsConv_home}/run/gsiDiagEval.py
ln -fs ${eval_home}/utils/gsiDiagEval.py ${obsRadi_home}/run/gsiDiagEval.py
ln -fs ${eval_home}/utils/gsiDiagEval.py ${obsGnss_home}/run/gsiDiagEval.py
ln -fs ${eval_home}/utils/gsiDiagEval.py ${obsSatw_home}/run/gsiDiagEval.py

# Cria dataout do pacote de estatistica do GSI
  if test ! -s ${stat_tabe}; then mkdir -p ${stat_tabe}; fi
  if test ! -s ${stat_figu}; then mkdir -p ${stat_figu}; fi
  if test ! -s ${stat_bina}; then mkdir -p ${stat_bina}; fi
  if test ! -s ${stat_logs}; then mkdir -p ${stat_logs}; fi

# Cria datainout dos pacotes de diagnostico do GSI
  if test ! -s ${adjBerr_work}; then mkdir -p ${adjBerr_work}; fi
  if test ! -s ${dryMcon_work}; then mkdir -p ${dryMcon_work}; fi
  if test ! -s ${humNphy_work}; then mkdir -p ${humNphy_work}; fi
  if test ! -s ${minFcos_work}; then mkdir -p ${minFcos_work}; fi
  if test ! -s ${obsConv_work}; then mkdir -p ${obsConv_work}; fi
  if test ! -s ${obsRadi_work}; then mkdir -p ${obsRadi_work}; fi
  if test ! -s ${obsGnss_work}; then mkdir -p ${obsGnss_work}; fi
  if test ! -s ${obsSatw_work}; then mkdir -p ${obsSatw_work}; fi

# Cria dataout dos pacotes de diagnostico do GSI no FTP/PUBLIC
  if test ! -s ${adjBerr_work}; then mkdir -p ${adjBerr_work}; fi
  if test ! -s ${dryMcon_work}; then mkdir -p ${dryMcon_work}; fi
  if test ! -s ${humNphy_work}; then mkdir -p ${humNphy_work}; fi
  if test ! -s ${minFcos_work}; then mkdir -p ${minFcos_work}; fi
  if test ! -s ${obsConv_work}; then mkdir -p ${obsConv_work}; fi
  if test ! -s ${obsRadi_work}; then mkdir -p ${obsRadi_work}; fi
  if test ! -s ${obsGnss_work}; then mkdir -p ${obsGnss_work}; fi
  if test ! -s ${obsSatw_work}; then mkdir -p ${obsSatw_work}; fi

# Cria a estrutura de diretorios principais dos pacotes de diagnostico para PAGE no FTP/PUBLIC
  if test ! -s ${eval_page}; then mkdir -p ${eval_page}; fi
  if test ! -s ${stat_page}; then mkdir -p ${stat_page}; fi
  if test ! -s ${diag_page}; then mkdir -p ${diag_page}; fi
  if test ! -s ${adjBerr_page}; then mkdir -p ${adjBerr_work}; fi
  if test ! -s ${dryMcon_page}; then mkdir -p ${dryMcon_page}; fi
  if test ! -s ${humNphy_page}; then mkdir -p ${humNphy_page}; fi
  if test ! -s ${minFcos_page}; then mkdir -p ${minFcos_page}; fi
  if test ! -s ${obsConv_page}; then mkdir -p ${obsConv_page}; fi
  if test ! -s ${obsRadi_page}; then mkdir -p ${obsRadi_page}; fi
  if test ! -s ${obsGnss_page}; then mkdir -p ${obsGnss_page}; fi
  if test ! -s ${obsSatw_page}; then mkdir -p ${obsSatw_page}; fi

# Cria dataout do pacote de minimizacao da funcao custo
  if test ! -s ${minFcos_figu}; then mkdir -p ${minFcos_figu}; fi
  if test ! -s ${minFcos_tabe}; then mkdir -p ${minFcos_tabe}; fi
  
  echo -e ""
  echo -e "\033[34;1m > Configuracao do EVAL no \033[36;1m${nome_sys} \033[34;1mcompleta \033[m"

  bannereval

elif [[ ${resposta} = N || ${resposta} = "n" ]]
then
  echo -e "\033[34;1m > Saindo do configurador. \033[m"
  exit 0
else
  exit 1
fi

}

# Funcao compilar
compilar(){

# Exportando variaveis do eval
  vars_export  ${1} ${2}

# Exportanto varaiveis do sistema em avaliacao
  #source  ${home_sys}/config_${nome_syslowc:0:3}.ksh vars_export ${nome_sys}
  
# Verificando se esta logado no eslogin01
if [ ${HOSTNAME} != "eslogin01" -a ${HOSTNAME} != "eslogin02" ];then
     echo "#####################################################################"
     echo "#                                                                   #"
     echo "#               Voce esta logado no ${HOSTNAME}                       #"
     echo "#                                                                   #"
     echo "# Antes de proceder com a Instalacao logar em um destes servidores: #"
     echo "#                                                                   #"
     echo "# $ ssh eslogin01 -XC                                               #"
     echo "#                                                                   #"
     echo "#  ou                                                               #"
     echo "#                                                                   #"
     echo "# $ ssh eslogin02 -XC                                               #"
     echo "#                                                                   #"
     echo "#####################################################################"

    #exit
fi

#########################################
# Compilacao modulo:  humNphy
#########################################
  echo 
  echo "+++++++++++++++++++++++++"
  echo "   Compilando o humNphy      "
  echo "+++++++++++++++++++++++++" 
  echo 
  echo -e ""
  ${humNphy_home}/config_humNphy.ksh compilar ${nome_sys} 

#############################################################################
# Compilacao do estatistica
##############################################################################

  cd ${stat_src}

  echo 
  echo "+++++++++++++++++++++++++"
  echo "   Compilando o Stat     "
  echo "+++++++++++++++++++++++++" 
  echo 
  #case $HOSTNAME in
  #  (eslogin09) . /opt/modules/default/etc/modules.sh;
  #    module swap PrgEnv-pgi PrgEnv-gnu;
  #    module load netcdf;;
  
${stat_src}/compile_stat.sh convrad 2>&1 | tee ${stat_src}/compile_stat.log

# Criando o arquivo run.stat.ksh plot_all.sh
#  echo -e ""
#  echo -e "\033[34;1m > Criando o arquivo run.stat.ksh e plot_all.sh para o sistema ${nome_sys}. \033[m"
#  cat ${stat_src}/run_stat.sh.template | sed "s/#NOMESYS#/${nome_sys}/g" > ${stat_run}/run_stat.sh
#  cat ${stat_src}/plot_all.sh.template | sed "s/#NOMESYS#/${nome_sys}/g" > ${stat_run}/plot_all.sh
#  chmod +x ${stat_run}/run_stat.sh ${stat_run}/plot_all.sh

# Copiando o inctime do sistema
  echo -e ""
  echo -e "\033[34;1m > Copiando o inctime do sistema ${nome_sys} para o stat/bin. \033[m"

  cp ${inctime} ${stat_bin}

  if [ -e ${stat_bin}/stat_conv.x -a -e ${stat_bin}/stat_radi.x ]; then
    echo 
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "!                                                !"
    echo "!      Compilacao do stat com Sucesso            !"
    echo "!                                                !"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo 
  else 
    echo 
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo "!                                                !"
    echo "! Compilacao do stat falhou !!!!                 !"
    echo "! Rever configuracoes ou espaço em disco!        !"
    echo "! Mais informacoes no arquivo compile_stat.log  !"
    echo "!                                                !"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    echo 
    exit 
  fi

#############################################################################
# Compilacao do demais pacotes de avaliacao diagnostico quando necessario
#############################################################################


#########################################
# Compilacao modulo:  adjBerr
#########################################
  echo -e ""
  echo -e "\033[34;1m > Implementar o compile do adjBerr e chamar via config_eval.ksh!! \033[m"
  
#########################################
# Compilacao modulo:  dryMcon
#########################################
  echo -e ""
  echo -e "\033[34;1m > Implementar o compile do dryMcon e chamar via config_eval.ksh!! \033[m"

#########################################
# Compilacao modulo:  minFcos
#########################################

  cd ${minFcos_home}

  echo 
  echo " minFcos: Ferramenta de diagnostico e impacto na minimizacao da funcao custo"
  echo "          na assimilacao de dados usando o GSI nao requer compilacao"
  echo 


#########################################
# Copiando executaveis caso necessario
#########################################
  echo -e ""
  echo -e "\033[34;1m > Compilacao do EVAL completa. Verifique possiveis erros no arquivo de log, caso o tenha criado. \033[m"

  bannereval

}

# Funcao testcase
testcase(){

# Exportando variaveis do eval
  vars_export  ${1} ${2}

# Exportanto variaveis do sistema em avaliacao
  source ${home_sys}/config_${nome_syslowc:0:3}.ksh vars_export ${nome_sys}

# Carregando Configuracoes do stat
  source ${stat_util}/conf/config.sh ${nome_sys}
 
  echo ""
  echo -e "\033[34;1m > Os dados do testcase do STAT estão disponiveis no diretorio: \033[m"
  echo -e "\033[34;1m > \033[36;1m/scratchin/grupos/das/projetos/gdad/public/eval/stat/testcase/${nome_sys:0:3}/gsi/dataout/* \033[m"
  echo -e "\033[34;1m > Sendo para o sistema ${nome_sys} no subdireorio ${nome_sys:0:3}/gsi/dataout \033[m"
  echo ""
  echo "Lista das dadas disponiveis para o testcase:"
  ls /scratchin/grupos/das/projetos/gdad/public/eval/stat/testcase/${nome_sys:0:3}/gsi/dataout/

  bannereval

}

# Final
bannereval(){

  echo -e ""
  echo -e "\033[34;1m > Para mais informacoes sobre esta distribuicao do EVAL, leia o arquivo: \033[m"
  echo -e "\033[34;1m   eval/README \033[m"
  echo -e ""

  exit 0

}

# Verifica os argumentos passados junto com o script
  echo -e ""
  echo -e "\033[36;1m >>> config_eval.sh \033[m"

if [[ $# = 0 ]]
then
  echo -e ""
  echo -e "\033[31;1m > Nao foi passado nenhum argumento! \033[m"
  ajuda
  bannereval 'silent'
elif [[	${1} =  "ajuda" ]]
then
  echo -e	""
  echo -e	"\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[m"
  ajuda
  bannereval
elif [[ $# < 2 ]]
then
  echo -e ""
  echo -e "\033[31;1m > Pelo menos dois argumentos sao requeridos! \033[m"
  ajuda
  bannereval 'silent'
elif [[ ${1} =	"configurar" ]]
then
  echo -e	""
  echo -e	"\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[34;1m Argumentos:\033[m \033[31;1m${2} ${3}\033[m \033[m"
  configurar ${2} ${3}
  bannereval
elif [[ ${1} = "compilar" ]]
then
  echo -e ""
  echo -e "\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[34;1m Argumentos:\033[m \033[31;1m${2} ${3}\033[m \033[m"
  compilar ${2} ${3}
  bannereval
elif [[ ${1} = "testcase" ]]
then
  echo -e ""
  echo -e "\033[34;1m > Opcao escolhida: \033[31;1m${1}\033[m \033[34;1m Argumentos:\033[m \033[31;1m${2} ${3}\033[m \033[m"
  testcase ${2} ${3}
  bannereval
elif [[ ${1} = "vars_export" ]]
then
  vars_export ${2} ${3}
else
  echo -e ""
  echo -e "\033[31;1m > Opcao desconhecida: \033[31;1m${1}\033[m \033[m"
  ajuda
  bannereval 'silent'
fi
