私は論理的な「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