Como alterar uma variável que faz parte do valor de outra variável

1

Atualmente, tenho essa função que determinará qual conta o usuário do banco de dados deve ter:

calc_id_value(){
case $id_opt in
  "") id_value="$script_id@$SID"
      sql_in_db=$id_value
  ;;
  sys) id_value="sys/$sys_password@$SID as sysdba"
       sql_in_db=$id_value
  ;;
  system) id_value="system/$system_password@$SID"
          sql_in_db=$id_value
  ;;
  *) echo "Error in calc_id_value()"
  ;;
esac
}

Mais tarde, vou ler cada linha de uma lista. Cada linha é um banco de dados. O loop abaixo irá para cada banco de dados e executará a função chamada sql_in , que faz o login e executa um arquivo. O problema é que ele não irá para o próximo banco de dados. Parece que é porque ainda interpreta $id_value = $script_id@$database1 quando deveria ser = para $script_id@databasen .

while read sid
do
  SID=$sid
  export SID
#  calc_id_value
  sql_in_db=$id_value
  sql_in
done < "$list_value"

O problema é que ele não irá para o próximo banco de dados. Parece que é porque continua interpretando $id_value = $script_id@$database1 quando deveria ser = para $script_id@databasen .

No entanto, funciona se eu descomentar calc_id_value dentro do loop. Se eu permitir isso, parece uma prática de programação ruim. Eu irei então forçar minha iteração atual de um loop para voltar através de uma declaração case . Existe uma maneira melhor? Se possível, gostaria de poder alterar dinamicamente a parte $SID da variável id_value após cada leitura de linha.

    
por exit_1 19.07.2017 / 19:56

1 resposta

1

É factível, mas provavelmente é prejudicial. Eu aconselharia esse nível de abstração ao criar scripts.

Considere quem quer que leia seu roteiro no futuro. No caso de outro código fonte, eles serão programadores; no caso de scripts, eles provavelmente serão usuários ou administradores que precisarão de pequenas correções ou pequenas personalizações. É antieconômico usar seu tempo e capacidades mentais apenas para economizar um pouco de tempo do processador (ou para se livrar de odores subjetivos de código). KISS é o paradigma para scripts.

Portanto, descomente o código no loop e não "sinta-se mal".

    
por 19.07.2017 / 21:19