아래 코드를 사용하여 여러 서버에 원격으로 로그인하고 있습니다.
file=ip.txt
while read line
do
ip=$( echo "$line" |cut -d ' ' -f 1 )
port=$( echo "$line" |cut -d ' ' -f 2 )
if telnet $ip $port </dev/null 2>&1 | grep -q Escape
then
echo "$ip $port Connected" >> Telnet_Success.txt
elif telnet $ip $port </dev/null 2>&1 | grep -q refused
then
echo "$ip $port Refused" >> Telnet_Refused.txt
else
echo "$ip $port Failed" >> Telnet_Failure.txt
fi
done < ${file}
입력 파일은 txt입니다. 예상 출력은 다음과 같습니다.내가 얻는 결과는 다음과 같습니다.예상되는 출력을 얻으려면 스크립트를 작성해야 합니다.
답변1
세 개의 출력 파일을 생성하려는 이유가 명확하지 않지만 이는 귀하의 요청이고 내 요청이 아니므로 다음이 도움이 될 수 있습니다.
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
여기와 같은 명령을 사용할 필요가 없습니다. 또한 파일을 사용하는 방식에 따라 후속 스크립트 실행이 기존 출력 행에 추가됩니다. 그것은 아마도 당신이 원하는 것이 아닐 것입니다.
화타이
PS 엄밀히 말하면 #!/bin/sh 또는 이와 유사한 shebang 줄을 맨 위에 넣어야 합니다. 여기서 제가 의지하는 것은 Bash 셸이 있는 Linux 시스템에서 실행되고 있다는 사실입니다.