1

checkServs.shサーバーのリストに SSH 接続し、それらのヘルス チェックを実行する簡単な bash スクリプト ( ) を作成しています。

次の行でエラーが発生し続けます。

SERVERS=(blah1.example.com blah2.example.com blah3.example.com blah4.example.com)

エラーは次のとおりです。

checkServs.sh: 3: checkServs.sh: Syntax error: "(" unexpected

オンラインの例を確認しましたが、これは正しいようですね。前もって感謝します!

4

3 に答える 3

4

構文エラーについてはわかりませんが、これは機能するはずです:

SERVERS="blah1.example.com blah2.example.com blah3.example.com blah4.example.com"
for server in $SERVERS
do
    echo $server
done

編集:ジョナサン・レフラーがコメントで指摘したように、スクリプトを実行していない可能性がありますbash. などの他のシェルはdash、配列構文を認識しない場合があります。その場合は、次のことができます。

SERVERS=(blah1.example.com blah2.example.com blah3.example.com blah4.example.com)
for i in $(seq 0 3)
do
    echo ${SERVERS[$i]}
done

しかし、単に名前をループして SSH コマンドを実行したい場合 (つまり、配列を使用しても有用な機能が得られない場合) は、最初の方法の方が簡単です。

于 2013-08-15T03:10:00.493 に答える
0

リモート サーバーは、コマンドを実行するときに別のシェルを呼び出す可能性があります。引数に bash -c を追加してみてください:

ssh user@server bash -c "<your commands>"

または:

ssh user@server bash < yourscript.sh  ## None in yourscript.sh must read input though.
于 2013-08-15T11:14:49.053 に答える
-1

左括弧はサブシェルを開始しますが、これは等号の右側に置くのは正しくありません。コマンドではなく、文字列式が必要です。

引用符は、文字列式をまとめるために使用されます。

于 2013-08-15T03:12:09.243 に答える