2013-12-18 25 views
8

Sto provando ad eseguire il seguente codice con un indirizzo IP come parametro dalla riga di comando; però io sono sempre un errore che dice - ": linea 6: errore di sintassi nei pressi di token imprevisto` echo' "Errore di sintassi vicino a token imprevisto `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 

favore potete aiutarmi a rettificare questo errore?

+1

Si noti che manca una coppia di parentesi per l'assegnazione dell'array: 'declare -a values ​​= ($ (ssh -q ...))'. Un'altra questione è se l'output del comando remoto viene analizzato o meno nell'insieme corretto di elementi dell'array. Inoltre, il 'less' nella tua pipeline non è necessario al meglio. – chepner

+0

Per iterare in modo sicuro sugli elementi di una matrice, utilizzare '" $ {values ​​[@]} "' - con le virgolette. Vedi http://stackoverflow.com/a/12316565/7552. Per creare l'array, è necessario racchiudere i valori tra parentesi: 'declare -a values ​​= ($ (ssh ...))'. Quello che hai attualmente è un array con un elemento, e quell'elemento è una stringa con parole separate da spazi bianchi. –

+0

Grazie mille :) – user2986175

risposta

19

Mettere uno ; davanti al do o mettere il do su una nuova riga.

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

Il ; dietro "valore $ echo" non è necessario, tranne se si scrive la done direttamente dietro di esso.

Problemi correlati