#! /bin/bash
#--------------------------------------------------------------------#
#       GSI Evaluation System (EVAL)  - DAS/CPTEC/INPE - 2022        #
#--------------------------------------------------------------------#
#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 os modulos que requerem compilacao (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 e usado para
#                    organizar a saida dos dados evitando sobreescrever resultados.
#                    Caso nao seja informado, sera usado o padrao EXPE.
#
#  Exemplos: ./config_eval.sh vars_export RMNA        testcase
#            ./config_eval.sh configurar  SMNA        testcase 
#            ./config_eval.sh compilar    SMNA        testcase
#            ./config_eval.sh testcase    RMS_V0.0.0  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. 
# 22 Setembro de 2022 - L. F. Sapucci - Versao apta para rodar na EGEON usando o readDiag-1.0.0. 
#
# !REMARKS:
# - Diferente das primeiras versoes do eval a atual versao não requer que o sistema de avaliacao 
#   esteja dentro do sistema de modelagem hospedeiro. As varaiveis de ambiante do sistema que deseja #   avaliar não são setadas e precisa se requerido que seja feito adicionalmente. 
#
# !TODO:
# - Modificar os scripts para amprimorar todo o pacote de avaliacao do impacto para um processo 
#   unificado permitindo execusoes automaticas de avaliacao pelo SVN;
# - Adequação para incluir a avaliação da asimilação das demais compoentes do sistema terrestre
# - Subistituir a versão do stat pela readDiag da radiância
#
# !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
    (eslogin02) echo ;
      echo  "Ambiente 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
      export eval_home=${SUBMIT_HOME}/${nome_sys}/evalu ;
      export eval_page=/share/das/dist/${USER}/${nome_sys}/evalu/${EXPE} ;
      export gnuplot=/scratchin/grupos/das/projetos/gdad/public/gnuplot5/bin/gnuplot ;
      export eval_public=/scratchin/grupos/assim_dados/home/gdad/public/evalu ;;
    (itapemirim) echo ;
      echo  "AmbienteITAP";
      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/${USER}  ;    # Padrao do Sistema Itapemirim.
      export eval_home=${SUBMIT_HOME}/evalu ;
      export eval_page=/share/das/dist/${USER}/${nome_sys}/evalu/${EXPE} ;  
      export eval_public=/dados/das/poper/GSI_XC50 ;;   
    (headnode.egeon.cptec.inpe.br) echo ;
      echo  "Ambiente EGEON";
      export usuario=${USER} ;                   # Padrao do Sistema
      export HOME2=/home/${usuario} ;            # Padrao do Sistema EGEON
      export SUBMIT_HOME=${HOME2} ;              # Padrao do Sistema EGEON
      export WORK_HOME=/mnt/beegfs/${USER}  ;    # Padrao do Sistema EGEON.
      export eval_home=${SUBMIT_HOME}/evalu_t12183 ;
      export eval_page=/pesq/share/das/dist/${USER}/${nome_sys}/evalu/${EXPE} ;
      export gnuplot=/home/carlos.bastarz/miniconda3/envs/gnuplot/bin/gnuplot ;
      export convert=/home/carlos.bastarz/miniconda3/envs/imagemagick/bin/convert ;
      export eval_public=/pesq/dados/das/poper/GSI_XC50 ;
      export GADDIR=/opt/ohpc/pub/apps/opengrads-2.2.1.oga.1/Resources/SupportData ;
      export GASCRP=/opt/ohpc/pub/apps/opengrads-2.2.1.oga.1/Resources/Scripts ;;         
  esac
  # Caso nenhum deses ambiente e identificado o script vai emular um ambeinte da egeon e para isso precisa do sudo
  if [ -z ${home_sys} ]     
  then
      echo  " "
      echo  " Ambiente simulando a EGEON"
      export usuario=${USER}                    # Padrao do Sistema
      export HOME2=/home/${usuario}             # Padrao do Sistema EGEON
      export SUBMIT_HOME=${HOME2}               # Padrao do Sistema EGEON
      export WORK_HOME=/mnt/beegfs/${USER}      # Padrao do Sistema EGEON.
      export eval_home=${SUBMIT_HOME}/evalu_t12183 
      export eval_page=/pesq/share/das/dist/${USER}/${nome_sys}/evalu/${EXPE} 
      export gnuplot=/home/carlos.bastarz/miniconda3/envs/gnuplot/bin/gnuplot 
      export convert=/home/carlos.bastarz/miniconda3/envs/imagemagick/bin/convert 
      export eval_public=/mnt/beegfs/das.group/testcase/SMNAexp21/GSI/dataout 
      export GADDIR=/opt/ohpc/pub/apps/opengrads-2.2.1.oga.1/Resources/SupportData 
      export GASCRP=/opt/ohpc/pub/apps/opengrads-2.2.1.oga.1/Resources/Scripts        
  fi
  
  
# Raiz do sistema onde o GSI esta instalado
  export home_sys=${SUBMIT_HOME}/${nome_sys}
  export work_sys=${WORK_HOME}/${nome_sys}

# Raiz dos pacotes de evaluation
  export eval_CNT=${eval_home}/dataCNT
  export eval_work=${work_sys}/evalu_t12183/${EXPE}
  
# Raiz dos pacotes de diagnosticos do GSI
  export diag_home=${eval_home}/diag
  export diag_CNT=${eval_CNT}/diag
  export diag_run=${eval_home}/run  
  export diag_work=${eval_work}/diag
  export diag_work=${eval_work}/diag  
  export diag_page=${eval_page}/diag

# Endereco do inctime 
  export inctime=${diag_run}/inctime
  
# 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
  
# Diretorios de saida de dados dos coeficientes de correção de bias da radiância
  export obsRadi_bias=${obsRadi_work}/satbias
  export obsRadi_bias_figu=${obsRadi_work}/satbias/figura
  export obsRadi_bias_tabe=${obsRadi_work}/satbias/tabela
  export obsRadi_bias_page=${obsRadi_page}/satbias/  

  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> SMNA -> Versao trunk do SMNA (Sistema de modelagem  numérica e assimilacao) 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 e usado para organizar a saida dos dados evitando"
  echo -e "                             sobreescrever resultados melhor controlando."
  echo -e "                             Caso nao setado usa o padrao EXPE."
  echo -e ""
  echo -e " Exemplos: ./config_eval.sh vars_export SMNA        EXPE"
  echo -e "           ./config_eval.sh configurar  SMNA        testcase "
  echo -e "           ./config_eval.sh compilar    SMNA_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 padrao: ./config_eval.sh configurar SMNA testcase"
  echo -e "                  ./config_eval.sh compilar   SMNA testcase"
  echo -e "                  ./config_eval.sh testcase   SMNA testcase"
  echo -e "                  ./config_eval.sh ajuda      SMNA testcase"
  echo -e ""

}


# Funcao configurar
configurar(){

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

  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 de trabalho (\$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 ${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 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 ${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

# Cria dataout do pacote de correção de bias de radiancia
  if test ! -s ${obsRadi_bias}; then mkdir -p ${obsRadi_bias}; fi
  if test ! -s ${obsRadi_bias_figu}; then mkdir -p ${obsRadi_bias_figu}; fi  
  if test ! -s ${obsRadi_bias_tabe}; then mkdir -p ${obsRadi_bias_tabe}; fi   
  if test ! -s ${obsRadi_bias_page}; then mkdir -p ${obsRadi_bias_page}; 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:0:7} == "eslogin" ];then
  if [ ${HOSTNAME} != "eslogin02" ];then
     echo "#####################################################################"
     echo "#                                                                   #"
     echo "#               Voce esta logado no ${HOSTNAME}                     #"
     echo "#                                                                   #"
     echo "# 'preciso estar no servidore eslogin02, digite:                    #"
     echo "#                                                                   #"
     echo "# $ ssh eslogin02 -XC                                               #"
     echo "#                                                                   #"
     echo "#####################################################################"

    exit
  fi
fi

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

#############################################################################
# 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}

  echo ""
  echo " Baixa dos dados do testcase para o local dos dados "
  echo " Caso nao esteja na EGEON isso e necessario:"
  if test ! -s ${eval_public}; then mkdir -p ${eval_public}; fi
  
  nfile=`ls ${eval_public} | wc -l`
  echo "Nfile: " $nfile   
  if [ $nfile -ne 0 ]
  then
    echo "Arquivos dispoveis para o testcase: " 
    ls ${eval_public}
  else
    echo "Buscando os arquivos no ftp do INPE e baixando para essa maquina: " 
    cd /mnt/beegfs/das.group/testcase
    wget -c -r https://ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_15_00_06.tar
    wget -c -r https://ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_15_12_18.tar
    wget -c -r https://ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_16_00_06.tar
    wget -c -r https://ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_16_12_18.tar
    wget -c -r https://ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_amsua.tar
    echo "Destarjeando os aquivos baixados: "
    tar -xvf   ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_15_00_06.tar
    tar -xvf   ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_15_12_18.tar
    tar -xvf   ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_16_00_06.tar
    tar -xvf   ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_conv_16_12_18.tar
    tar -xvf   ftp1.cptec.inpe.br/pesquisa/das/testecase/SMNAexp21_amsua.tar
#    rm -rf ftp1.cptec.inpe.br
  fi
  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
