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