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
.