条件式の構文エラー

条件式の構文エラー

私は論理 '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

関連情報