2013-12-18 110 views
8

我想執行下面的代碼與IP地址作爲參數從命令行;但是我收到一個錯誤說 - 「:行6:語法錯誤附近意外的標記'回聲」 」語法錯誤附近意外的標記`回聲'

. 

#!/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 ...))'。是否將遠程命令的輸出解析爲正確的數組元素是另一個問題。另外,你的管道中的「少」是不必要的。 – chepner

+0

爲了安全地遍歷數組的元素,使用'「$ {values [@]}」' - 引號。請參閱http://stackoverflow.com/a/12316565/7552。要創建數組,需要將值包裝在圓括號中:'declare -a values =($(ssh ...))'。你目前擁有的是一個包含一個元素的數組,而該元素是一個由空格分隔的單詞。 –

+0

非常感謝:) – user2986175

回答

19

;放在do的前面,或者把do放在新的行上。

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

後面不需要「回聲$價值」的;除非你寫done直接在它後面。

相關問題