Bash | Txt 파일 > tmp > 프로세스 tmp > 출력

Bash | Txt 파일 > tmp > 프로세스 tmp > 출력

최근에는 Jump Host를 활성화하여 모든 장치와 상호 작용할 수 있었습니다. 6.x는 빨간색이며 루트 액세스 권한이 없습니다. Autoexpect 및 bash에서만 스크립트를 작성할 수 있으며 모듈은 불가능합니다.

출처: 5000개의 장치가 있습니다(줄당 1개, 매개변수당 3개 - 위치 호스트 이름 IP - 탭으로 구분됨).

작업: 각 위치(ARGV1)에서 모든 장치를 검색하고(5000으로 가정, 40은 위치를 나타냄) 출력을 임시 파일로 리디렉션하고(출력 없음, 에코 꺼짐) 임시 디렉터리의 각 장치에 대해 명령을 실행합니다. 출력은 IP가 아닌 HostName ARGV2여야 합니다.

tmp에서 각 장치를 ping하고 각 호스트에 대해 성공을 반환하거나 각 장치에 로그인하고 명령을 실행하고 호스트 결과를 인쇄하고 tmp 파일의 다음 항목으로 이동한다고 말합니다.

입력 파일 구조의 예:

AA Torp1 1.1.1.1 
AA Torp2 2.2.2.2
BB Torp97 9.9.9.9

AA 위치에서 각 장치에 ping을 실행한다고 가정해 보겠습니다. cat hosts.txt | grep AA예를 들어 tmp 스크립트를 작성한 다음 각 IP를 ping하는 방법의 출력은 다음과 같습니다 1.1.1.1.2.2.2.2

핑이 성공하면 Torp1 OK 핑이 실패하면 Torp2 NOK

기본적인 예... 또는 위치 기반 각 IP에 대해 ssh grep 명령 출력을 실행한 다음 tmp 파일을 삭제합니다.

답변1

이를 수행하는 쉬운 방법은 while read루프를 사용하는 것입니다. 일반적인 형식은 다음과 같습니다.

while read var1 var2 ... varN; do something; done < inputFile

기본적으로 각 입력 줄은 공백으로 분할되므로 기본적으로 다음이 이미 필요한 것입니다.

while read location hostname ip; do
    printf "Ping of $hostname ($ip): "
    ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done < ips.txt

또는 특정 위치로 제한합니다.

grep location ips.txt | while read location hostname ip; do
    printf "Ping of $hostname ($ip): "
    ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done

이 파일로 테스트하면:

location1 example.com 93.184.216.34
location2 google.com 8.8.8.8
location1 bad.com 123.456.7.8

우리는 다음을 얻었습니다:

$ grep -w "^$location" ips.txt | 
    while read location hostname ip; do     
        printf "Ping of $hostname ($ip): ";     
        ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"; 
    done 
Ping of example.com (93.184.216.34): OK
Ping of bad.com (123.456.7.8): FAILED

관련 정보