Um comando como
xyz=abc def ghi jkl
significa executar o programa def com argumentos ghi e jkl ,
e com a variável de ambiente xyz definida como abc . Para definir HOSTS para a string
MACHINE1 MACHINE 2
você precisaria dizer
HOSTS="MACHINE1 MACHINE 2"
(embora eu assuma que você não quer ter um espaço
entre o segundo MACHINE e o 2 .)
Você provavelmente poderia fazer isso funcionar
já que nomes de host não contêm espaços ou outros caracteres especiais.
No entanto, pode ser mais inteligente usar uma matriz:
HOSTS=(MACHINE1 MACHINE2)
for i in "${HOSTS[@]}"
do
echo "$i"
ssh -q "$i" uname -a
done
Essa estrutura permite que você tenha elementos de matriz de várias palavras com caracteres especiais:
lyrics=("Twinkle twinkle little *" "How I wonder what you are")
for line in "${lyrics[@]}"
do
printf "%s\n" "$line"
done
Note que você deve sempre citar todas as referências de variáveis de shell
(por exemplo, "${HOSTS[@]}" e "$i" ) a menos que você tenha um bom motivo para não
e você está certo de que sabe o que está fazendo.
Além disso,
- Você não precisa de ponto-e-vírgula no final das linhas.
- É comum em scripts de shell usar letras minúsculas para nomes de variáveis de script já que ALL UPPER CASE é tradicionalmente usado para variáveis do sistema.
-
echoé útil para imprimir strings fixas, mas pode fazer coisas inesperadas com dados arbitrários. É muito mais seguro usarprintf.