以下のif elseステートメントにどのような問題があるのか理解できません。
if [ "$technology" == "AN_EUD" ] then
if [ "$temporal_unit" == "15min" ] && [ "$regional_unit" == "node" ]
then
parm="DEVICEID"
elif [ "$temporal_unit" == "15min" ] && [ "$regional_unit" == "trunk" ]
then
parm="DEVICEID"
else echo "Unkown parameter"
fi
else [ "$technology" == "IP" ] then
if [ "$temporal_unit" == "15min" ] && [ "$regional_unit" == "item" ]
then
parm="ME_NAME"
elif [ "$temporal_unit" == "min" ] && [ "$regional_unit" == "item" ]
then
parm="DEST"
else echo "Unknown parameter"
fi
fi
継続的にエラー未満
my.sh: line 67: syntax error near unexpected token `else'
my.sh: line 67: ` else [ "$technology" == "IP" ] then'
ベストアンサー1
if [ "$technology" == "AN_EUD" ] then
^
そこにセミコロンが抜けましたね。作成された方法は、シェルキーワードではなくコマンドの一般的な引数then
です。[
(再び、これはコマンドのキーワードではありませんecho if then else fi
。)
Bashは後者がelse
まだ探しているので予期しないトークンであり、コマンドの先頭にあるthen
ので文句を言います。else
はいキーワードで識別されます。しかし、文法的ではありません。
Shellcheck.netまた、「'then'の前にセミコロンや改行文字を使用してください(またはリテラルにするには引用符を使用してください)」とされています。
修理後の様子はこんな感じです。
else [ "$technology" == "IP" ] then
そうですelif
が、そうではありませんelse
。前にセミコロンがない場合は、シェル構文に関する限りこれは実際には大丈夫ですthen
。コマンド[ "$technology" == "IP" ] then
はelseブロックの一部にすぎません。テストでは最後の引数が[
表示されると予想されます]
が、ブロックの残りの部分は実行されるため機能しません。セミコロンを追加してそのままにすると、else
「予期しないキーワード」エラーが発生しますthen
。
テストのもう一つの問題は、==
Bashとkshでは動作しますが、標準ではないということです。標準比較演算子[ .. ]
はです=
。
(私はあなたが実際に何をしているのかを見ずに構文とエラーだけを見ていることに注意してください。)