0

これが私が達成しようとしていることです。文字列が一致するまでループを実行し、do コマンドを 1 回実行して、残りのスクリプトに進みたいですか? 例えば

string=`tail /var/myapp/main.log|sort -k5 | awk '{print $4}'`

while [ $string = "failed" ] do
service restart myapp
break
done
echo "blah blah blah as the rest of the script"
echo "on and on"

まで使ってみましたが、それは間違いないと思います。正しいコマンドを使用していない可能性があります。「IF」は機能しません。特定の時間に探しているものが見つかるまで、これを 1 日に 1 回実行し、それを実行し、残りのスクリプトを実行して完了するまで実行したいからです。どんなに試しても、ループし続けます... 永遠に。一度だけやってみたいです。

4

2 に答える 2

1

無限ループ内の条件をチェックし、条件を満たしたときに抜け出す必要があります。

while true; do
  string=$(tail /var/myapp/main.log|sort -k5 | awk '{print $4}')
  [ $string = "failed" ] && break
done
service restart myapp
echo "blah blah blah as the rest of the script"
echo "on and on"
于 2013-04-30T05:00:35.470 に答える
0
while sleep 1
do
  set $(tail /var/myapp/main.log | sort -k5 | awk '{print $4}')
  [ $1 = failed ] || break
done

service restart myapp
  • 毎秒ループ
  • 出力が等しいかどうかをループごとにチェックfailed
  • そうでなければfailed壊れる
  • 残りのスクリプト
于 2013-04-30T03:19:14.380 に答える