para executar um comando para várias variáveis no shell script

1

Então, estou armazenando os valores da primeira coluna retornada de uma consulta sql em uma variável ( var ). Ela deve ser um tipo de matriz, porque a consulta sql retorna várias linhas e, posteriormente, essas valores seriam usados em um comando.

Não sei como executar o mesmo comando, um após o outro, com variáveis diferentes em um script de shell.

var='app/oracle/product/10.2.0/bin/sqlplus -s user/passwd<< !EOF!
  set pages 0 echo off feed off timing off
select entity_name,uid,set_date from table_name;
exit
     !EOF!'

O comando a ser executado se parece com:

X=$var Y='date' ./test.sh
    
por User123 02.09.2018 / 10:04

2 respostas

1

Você não precisa armazenar a saída de sua consulta de banco de dados em uma variável.

app/oracle/product/10.2.0/bin/sqlplus -s user/passwd <<END_SQL | while IFS= read -r thing; do X="$thing" Y="$(date)" ./test.sh; done
set pages 0 echo off feed off timing off
select entity_name,uid,set_date from table_name;
exit
END_SQL

Isso leria a saída do comando sqlplus e chamaria seu script uma vez para cada linha, configurando o valor das variáveis de ambiente X e Y no processo.

    
por 02.09.2018 / 16:49
2

Sua solicitação não está clara. Você está em posição de modificar o roteiro? Caso contrário, e se depender explicitamente das variáveis X e Y , você precisará de uma variável temp / loop. Para executar test.sh para cada elemento da matriz, tente um loop for (a menos que haja caracteres de espaço em branco em qualquer um dos elementos):

for TMP in "${var[@]}"; do X="$TMP" Y=$(date) ./test.sh; done
    
por 02.09.2018 / 11:34