Переменная var
в вашем коде используется до того, как цикл начнет создавать выходной файл.
Если вы хотите вывести результат команды ssh
в файл, имя которого вы составляете из $var
, сделайте следующее:
#!/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
Здесь я также изменил цикл, чтобы он считывал входной файл построчно (, игнорируя начальные и конечные пробелы в каждой строке ), и я заставил var
получить значение unknown
если оператор if
не принимает "истинную" ветвь.
Кроме того, вам нужно -n
для ssh
. В противном случае ssh
использовал бы все доступные входные данные (, перенаправленные сюда из файла servers
).
Другое изменение, которое можно было бы внести, заключается в использовании оператора case... esac
вместо оператора if
, особенно если число проверяемых IP-адресов превышает пару:
#!/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