Unixスクリプトのループまで無限ループ

Unixスクリプトのループまで無限ループ

私はUnixスクリプトを使用していますuntil loop。私のスクリプトのアイデアは、URLステータスが機能しているか無効になっているかを常に確認する必要があることです。動作するとループを終了します。私のスクリプトはcurlURLのステータスとgrepステータスコードを確認するために使用します(私は同じです。Until200ループがどのように機能するかを理解すると、定義した条件が満たされるまで実行されます)スクリプトをテストすると、次のようになります。無限ループ
です。私のスクリプトは次のとおりです。

var=""
until [echo "$var" | grep -q "HTTP/1.1 200 OK"]
do 
  var=$(curl -I -k https://mystie url | grep "HTTP/1.1 200 OK")
  echo $var
done

var=$(curl -I -k https://mystie url | grep "HTTP/1.1 200 OK")端末で直接テストすると、正しい結果が返されます。

答え1

角括弧には条件式(単項またはバイナリ)のみを含めることができるため、コマンドの終了状態を条件として使用するには角括弧を削除する必要があります。

until curl -I -k https://mystie url | grep -q "HTTP/1.1 200 OK"
do
   .... do something .... 
done

角かっこを誤って使用したため、条件が失敗してゼロ以外の状態で終了するため、ループはuntil停止しません。

角括弧([ ... ])には条件式のみを含めることができ、最初の角括弧の後と最後の角括弧の前にはスペースを含める必要があります。

たとえば、[ "$var" = "expected value" ] 代わりに["$var" = "expected value"]

関連情報