私は論理 '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
設定すると、次のようになります。a
a="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