Bashからループの先頭に移動

Bashからループの先頭に移動

forループでif条件を使用しています。 if条件がyesを返す場合は、forループの先頭に戻りたいと思います。バッシュでこれは可能ですか?

#!/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. 

したがって、IF条件内の上記のtmprnt変数が検索文字列と一致する場合は再実行したいと思います(SQLクエリは時々「選択された行がありません」を返しますが、再実行すると何らかの方法で正しい結果を返します)。 BashにはGO TOがないことを知っています。脱出口をご提案ください。

ベストアンサー1

continue次のクエリを続行するには、このステートメントを使用してください。

同じクエリを繰り返すには、ループを使用してください。クエリを繰り返したいので、使用している言語に存在しない低レベルの構文で意図を隠すのではなく、これを行うスクリプトを作成してください。

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

意図したとおりに作成した条件文を修正しました。実行出力はgrep意味がありません。返品変数とコマンドの置換には二重引用符を入れる必要があります。

ここでロジックを参照してください。検索文字列は次のとおりです。いいえ存在する場合は、クエリを繰り返します。

スクリプトは緊密なループでデータベースを照会するので、ここに何かがありました(質問を単純にするためにコードを省略してください)。

おすすめ記事