Мне непонятно, почему вы хотите создать три выходных файла, но поскольку это ваше требование, а не мое, возможно, поможет следующее.
data=${1:-ip.txt}
while read host port; do
preamble="telnet $host $port"
case $(telnet $host $port </dev/null 2>&1 | tail -1) in
(*closed*) echo "$preamble... Connected" >>Telnet_Success.txt
;;
(*refused*) echo "$preamble... Refused" >>Telnet_Refused.txt
;;
(*) echo "$preamble... Failed" >>Telnet_Failure.txt
esac
done <$data
exit
Первая строка позволяет вам принять решение о передаче входных данных в другой файл (, например.data.txt ), указав его в качестве аргумента сценария. Например
$ telnet.sh data.txt
Если это не указано, предполагается, что файл «ip.txt». Затем используйте оператор case, чтобы сопоставить последнюю строку выходных данных команды, чтобы определить файл, в который помещается результирующее сообщение.
Обратите внимание, что оператор read
позволяет вам выбирать отдельные «слова» в строке ввода --, что устраняет необходимость использования здесь команд, подобных cut
. Кроме того, то, как вы использовали свои файлы, означает, что последующие запуски скрипта добавляются к существующим строкам вывода. Это может быть не то, что вы хотите.
ХТХ
П.С. Строго говоря, я должен был разместить линию шебанга вверху, как в :#!/бин/ш или похожие. Я полагался здесь на тот факт, что я работаю в системе Linux с оболочкой Bash.