Ir para o começo do loop no bash

0

Estou usando uma condição if dentro de um loop for. Se a condição if retornar sim, eu gostaria de ir para o início do loop for novamente. Isso é possível em bash?

#!/bin/bash
for i in /apps/incoming/*.sql
do
j=$(egrep "[A-Z]{6}[ ]{1}[@abc_id]{10}[ ]{1}[=]{1}[ ]{1}[0-9]*" $i | awk '{ print $4 }')
#echo $j

#Query database

export ORACLE_HOME=/apps/uc/tmd/oracle/instantclient_11_2
export LD_LIBRARY_PATH=/apps/uc/tmd/oracle/instantclient_11_2
sqlplus=/apps/oracle/instantclient_11_2/sqlplus

tmprnt=$($sqlplus -s abcsd/sakfdj@'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = odsakjfldkjf)(PORT = 1111)))(CONNECT_DATA =(SERVICE_NAME = SFDDFD)(SRVR = DEDICATED)))' << EOF

SELECT name from blabla where abc_id='$j';
EOF)

if 'echo ${tmprnt} | grep "${searchString1}" 1>/dev/null 2>&1'
then
  GO TO the start of FOR IN loop and run the query again. 

Portanto, se a variável tmprnt acima da condição IF corresponder à string de pesquisa, eu gostaria de executar a coisa novamente (A consulta SQL retorna "nenhuma linha selecionada" às vezes, mas de alguma forma retorna resultados corretos em que executamos novamente). Eu sei que não há GO TO no bash. Por favor, sugira uma saída.

    
por Koshur 31.03.2017 / 16:32

1 resposta

1

Se você quiser passar para a próxima consulta, use a instrução continue .

Se você quiser repetir a mesma consulta, use um loop. Você quer repetir a consulta, então escreva um script que faça isso, em vez de disfarçar sua intenção com uma construção de baixo nível que nem existe na linguagem que você está usando.

for i in /apps/incoming/*.sql
do
  while
    j=$(…)
    …
    ! echo "${tmprnt}" | grep "${searchString1}" 1>/dev/null 2>&1
  do
    … # whatever you want to do when $tmprnt has the right format
  done
done

Eu corrigi a declaração condicional que você escreveu para o que você provavelmente quis dizer - executar a saída de grep como um fragmento de shell não faz sentido. Também lembre-se de colocar aspas duplas em torno de substituições de variáveis e comandos .

Observe a lógica aqui: enquanto a string de pesquisa não estiver , repita a consulta.

Esse script estaria consultando o banco de dados em um loop apertado, então algo está faltando aqui (esperamos que o código que você acabou de omitir para manter a questão simples).

    
por 01.04.2017 / 02:14