A variável var
em seu código é usada antes do início do loop para criar o arquivo de saída.
Se você deseja enviar o resultado do comando ssh
para um arquivo cujo nome você construiu a partir de $var
, faça o seguinte:
#!/bin/bash
while read -r server; do
if [ "$server" = "198.162.1.3" ]; then
var='apple'
else
var='unknown'
fi
ssh -n "test@$server" 'uname -n' >"/tempout/uname_$var.txt"
done <servers
Aqui, eu também alterei o loop para que ele leia o arquivo de entrada linha por linha (ignorando espaços em branco à esquerda e à direita em cada linha), e eu fiz var
obter o valor unknown
se a% A instruçãoif
não aceita o ramo "verdadeiro".
Além disso, você precisa de -n
para ssh
. Caso contrário, ssh
consumiria toda a entrada disponível (aqui redirecionada do arquivo servers
).
Outra alteração que pode ser feita é usar case ... esac
em vez de uma instrução if
, especialmente se o número de endereços IP que você testou for maior que um par:
#!/bin/bash
while read -r server; do
case $server in
198.162.1.3) var=apple ;;
198.162.1.5) var=cottage ;;
198.162.1.7) var=bumblebee ;;
*) var=unknown
esac
ssh -n "test@$server" 'uname -n' >"/tempout/uname_$var.txt"
done <servers