条件式の構文エラー

条件式の構文エラー

私は論理的な「OR」文と論理的な「AND」文を組み合わせて使用​​するスクリプトを作成しています。スクリプトは次のとおりです。

#!/bin/bash

echo "Enter the value of a"
read $a
echo "Enter the value of b"
read $b
if

[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then

echo "Either of the JVMs is not yet up, so lets wait for some more time"

i=$(($i+1))
sleep 1s

fi

そして実行すると、次のエラーが発生します。

line 13: syntax error in conditional expression
line 13: syntax error near `]'
line 13: `[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then'

私はbashシェルを使用しています。これにご協力いただきありがとうございます。

答え1

あなたは[[一致しません]。常におよびで閉じる必要があります[[。使用:]][]

if [[ $a != STARTED && $b == STARTED ]] || [[ $b != STARTED && $a == STARTED ]]; then

より良いのは、次を[[使用しているからです。

if [[ ($a != STARTED && $b == STARTED) || ($b != STARTED && $a == STARTED) ]]; then

フォーマットを適用した後に見つかったもう1つの間違いは、次のことを行うことです。

read $a
read $b

以下を行う必要があります。

read a
read b

最初の形式の場合$aとは$bシェルによってその内容に置き換えられるため、この行の前に設定しなかった場合、最終コマンドは次のようになります。

read

(この場合、読み取った値は変数に保存されます。)いくつかの値(例:)をREPLY設定すると、次のようになります。aa="blah blah"

read blah blah

答え2

変える:

[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then

私は次を使うでしょう:

if [ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]; then

関連情報