여러 주소를 통해 반복: ping을 수행하고 데이터를 파일에 넣습니다.

여러 주소를 통해 반복: ping을 수행하고 데이터를 파일에 넣습니다.

나는 스크립트를 갖고 싶습니다 :

  1. IP 주소 목록 보기
  2. 핑 주소 중 하나
  3. 데이터를 가져와서 파일에 넣기
  4. 다음 IP로 이동

지금까지 나는 다음을 가지고 있습니다 :

cd /Path/to/addressees || exit 1
for targethost in a b c; do
  {ping {targethost}
      echo $'\n'"finished:
  } >"$log_file" 2>&1
done

이것을 실행하면 오류가 발생합니다.

./ping_address: line 3: cd: /path/to/ip_adress: No such file or directory
./ping_address: line 7: unexpected EOF while looking for matching `"'
./ping_address: line 8: syntax error: unexpected end of file

저는 아직 Unix 스크립팅에 익숙하지 않기 때문에 어떤 도움이라도 큰 도움이 될 것입니다!

답변1

몇 가지:

  1. 파일에 CD를 넣을 수 없습니다(테스트를 사용하여 -f파일이 존재하는지 확인할 수 있습니다. 아래 참조).
  2. "ab c"를 사용했는지 잘 모르겠습니다. 이 변수에는 주소가 포함되어야 합니까? 귀하의 주소가 스크립트에 포함되어 있는지, 아니면 파일에 저장되어 있는지는 확실하지 않습니다.
  3. 일반적으로 변수를 참조하려면 $가 필요하며(즉, ${targethost}$가 아님 targethost) $할당할 때 생략됩니다.

그렇지 않은 이유는 무엇입니까(ip_addresses라는 파일이 있고 한 줄에 하나의 주소가 있거나 공백으로 구분된 주소가 있다고 가정).

#!/bin/bash
IP_FILE="/tmp/ip_address_file" # The file with the IP addresses
LOGFILE="/tmp/log_results"  # Where the results will be stored
if [[ ! -f ${IP_FILE} ]]; then
   echo "No File!"
   exit 1
fi
for IP_ADDRESS in $(cat $IP_FILE); do
   echo "TEST FOR ${IP_ADDRESS}" >> $LOGFILE
   # The -c 1 means send one packet, and the -t 1 means a 1 second timeout    
   ping -c 1 -t 1 ${IP_ADDRESS} >> $LOGFILE 2>&1 
done

또는 각 IP에 대한 파일을 생성하려면 다음을 사용할 수 있습니다.

#!/bin/bash
IP_FILE="/tmp/ip_address_file" # The file with the IP addresses
if [[ ! -f ${IP_FILE} ]]; then
   echo "No File!"
   exit 1
fi
for IP_ADDRESS in $(cat $IP_FILE); do
   echo "TEST FOR ${IP_ADDRESS}"
   # The -c 1 means send one packet, and the -t 1 means a 1 second timeout    
   ping -c 1 -t 1 ${IP_ADDRESS} >> ${IP_ADDRESS}.log 2>&1 
done

스크립트에 IP를 포함시키려면 다음을 수행하십시오.

#!/bin/bash
IPS='1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 5.5.5.5'
if [[ ! -f ${IP_FILE} ]]; then
   echo "No File!"
   exit 1
fi
for IP_ADDRESS in ${IPS}; do
   echo "TEST FOR ${IP_ADDRESS}"
   # The -c 1 means send one packet, and the -t 1 means a 1 second timeout    
   ping -c 1 -t 1 ${IP_ADDRESS} >> ${IP_ADDRESS}.log 2>&1 
done

답변2

이보다 더 분명한 것은 없습니다:

  1. /path/to/ip_adress이 디렉터리는 스크립트를 실행하기 전에 생성되어야 합니다.
  2. "finished:끝에 "가 없습니다.
  3. 세 번째 오류는 단순히 두 번째 오류의 결과입니다.

관련 정보