2013-12-18 37 views
8

コマンドラインからパラメータとしてIPアドレスを指定して次のコードを実行しようとしています。 「:行6:予期しないトークンの近くに構文エラー `エコー」 」予期しないトークン `echo 'の構文エラー

. 

#!/bin/sh 
echo $1; 
declare -a values=$(ssh -q [email protected]$1 "ps -eo pcpu,pid,user | sort -r -k1 | less | grep jboss"); 
for value in ${values[*]} do 
    echo $value; 
done 

あなたは私は、このエラーを修正することができますしてください - しかし私はというエラーを取得していますか?

+1

あなたの配列の代入には、 'declare -a values =($(ssh -q ...))'というカッコが足りないことに注意してください。リモートコマンドの出力が正しい配列要素のセットに解析されるかどうかは別の質問です。また、あなたのパイプラインの 'less'はせいぜい不要です。 – chepner

+0

配列の要素を安全に反復するには、 '" {$ {values [@]} "'を引用符で囲みます。 http://stackoverflow.com/a/12316565/7552を参照してください。配列を作成するには、値をカッコで囲む必要があります: 'declare -a values =($(ssh ...))'。あなたが現在持っているのは、1つの要素を持つ配列です。その要素は、単語が空白で区切られた文字列です。 –

+0

ありがとうございました:) – user2986175

答えて

19

;をdoの前に置くか、改行します。 「エコー$値」の背後にある

for value in ${values[*]}; do 
    echo $value 
done 

;は、あなたが直接その背後にdoneを書いた場合を除き、必要ありません。

関連する問題