複数サーバーの管理

複数サーバーの管理

簡単なスクリプトを作成しましたが、複数のホストで実行したいと思います。 (つまり、私ははいスクリプトを作成しますが、複数のホストで実行する必要があります。 )スクリプトは機能しますが、最初のホストでのみ機能します。複数のホストを追加すると、エラーメッセージが表示されます。

line 3: MACHINE2: command not found

私は何が間違っていましたか?スクリプトは以下に掲載されています。

#!/bin/sh

HOSTS=MACHINE1 MACHINE 2

for i in $HOSTS; do echo $i
    ssh -q $i uname -a;
done

ベストアンサー1

このようなコマンド

xyz=abc def ghi jkl

defパラメータの使用ghi、プログラムの実行、jklおよびxyz環境変数の設定を示しますabcHOSTS文字列として設定

MACHINE1 MACHINE 2

あなたは言わなければなりません

HOSTS="MACHINE1 MACHINE 2"

MACHINE(2番目との間にスペースを入れたくないと仮定しますが2。)ホスト名にスペースやその他の特殊文字が含まれていないため、これを機能させることができます。しかし、配列を使用する方が賢明かもしれません。

HOSTS=(MACHINE1 MACHINE2)

for i in "${HOSTS[@]}"
do
    echo "$i"
    ssh -q "$i" uname -a
done

この構造を使用すると、特殊文字を含む複数の単語配列要素を持つことができます。

lyrics=("Twinkle twinkle little *" "How I wonder what you are")

for line in "${lyrics[@]}"
do
    printf "%s\n" "$line"
done

妥当な理由がない限り、必ずすべてのシェル変数参照(例:"${HOSTS[@]}"and)を引用する必要があります。"$i"確かにあなたは何をしているのか知っています。返品、

  • 行の末尾にはセミコロンは必要ありません。 
  • シェルスクリプトでは、システム変数は伝統的に大文字を使用するため、スクリプト変数名に小文字を使用するのが一般的です。
  • echo固定文字列を印刷するのに便利ですが、任意のデータで予期しない操作を実行できます。それ遠く使用する方が安全ですprintf

おすすめ記事