![シェルの条件がうまくいかないと、私が何か間違いを犯しているかどうかはわかりませんか? [コピー]](https://linux33.com/image/153293/%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%8C%E3%81%86%E3%81%BE%E3%81%8F%E3%81%84%E3%81%8B%E3%81%AA%E3%81%84%E3%81%A8%E3%80%81%E7%A7%81%E3%81%8C%E4%BD%95%E3%81%8B%E9%96%93%E9%81%95%E3%81%84%E3%82%92%E7%8A%AF%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%81%AF%E3%82%8F%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
サーバーに基づいて特定の作業セットを実行する必要があるため、サーバーに基づいて条件を定義したいと思います。これは私が思いついたスクリプトです。複数のブログを読みましたが、スクリプトでエラーが見つかりませんでした。私がここで見落としている部分を案内してもらえますか?
#!/bin/bash
SERVER_NAME=`hostname -s`
hostname -s
DBServer=(servr1 servr2 servr3 servr4)
#AppServer=[hqidlfdiwa01 , hqiqlfdiwa01]
echo "Values of DBServer seeing is ${DBServer[*]}"
Values of DBServer seeing is servr1 servr2 servr3 servr4
for i in ${DBServer[*]}
do
echo "current value in I is $i"
echo "The server name found is $SERVER_NAME"
if [$SERVER_NAME == $i]
then
echo "I am on one of the servers and it is $i"
fi
done
サーバーが表示する出力は次のとおりです。
current value in I is servr1
The server name found is servr1
-bash: [servr1: command not found
current value in I is servr2
The server name found is servr1
-bash: [servr1: command not found
current value in I is servr3
The server name found is servr1
-bash: [servr1: command not found
current value in I is servr4
The server name found is servr1
-bash: [servr1: command not found
答え1
シェルではスペースが重要です。
変える:
if [$SERVER_NAME == $i]
そして:
if [ "$SERVER_NAME" = "$i" ]
空白がない場合、シェルは引数と呼ばれるコマンド[$SERVER_NAME
(たとえば)を実行すると仮定します。このスペースを使用すると、シェルを実行できます。[servr1
==
$i]
テストで表されるコマンド[
。
また、どのシェル拡張が適用されるのかわからず、特に適用したい場合を除き、常にシェル変数を二重引用符で囲んでください。
最後に、bashは内部的に文字列の同一性を許可==
または表現しますが、他のシェルはこれを理解するだけです。移植性のために内部的に同じ文字列を使用するのが最善です。=
[...]
=
=
[...]