#!/bin/bash
COUNT=100
SIZE=100
INTERVAL=0.2
for myHost in `cat /files0/home/singhtr/input`
do
echo $myHost
ping -i $INTERVAL -q -n -s $SIZE -c $COUNT $myHost|grep -i packet
done
입력 파일:
# cat input
4.2.2.2 abc ATT
8.8.8.8 def BCC
아래와 같이 입력 파일에서 여러 값을 인쇄하는 방법
예상 출력:
IP of the device: 4.2.2.2
Device Name: abc
customer name:ATT
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
등등.
bash/shell 스크립트를 통해 이를 달성하고 싶습니다.
답변1
#!/bin/bash
while read myHost
do
COUNT=100
SIZE=100
INTERVAL=0.2
IP=$(echo $myHost | cut -d " " -f1)
NAME=$(echo $myHost | cut -d " " -f2)
CUSTOMER=$(echo $myHost | cut -d " " -f3)
PING=$(ping -i $INTERVAL -q -n -s $SIZE -c $COUNT $IP | grep -i packet)
echo "IP of the device: $IP"
echo "Device name: $NAME"
echo "Customer name: $CUSTOMER"
echo "$PING"
echo ""
done < /files0/home/singhtr/input
이것이 문제에 대한 가능한 해결책 중 하나입니다. 출력하고 싶은 것을 cut
선택 하면 됩니다 . 그런 다음 field
간단한 명령으로 echo
출력합니다 . 한 번에 한 줄씩 파일을 읽으려면 다음을 사용할 수 있습니다.
while read LINE
do
...
done < FILE
편집하다
정기적으로 스크립트를 실행하려면 스크립트 생성을 고려해야 합니다 . 입력하여 현재 로그인된 사용자를 볼 cronjob
수 있습니다 . 일정을 예약하려면 다음을 수행하세요.crontab -l
cronjobs
cronjob
$ crontab -e
crontab을 편집합니다. 예를 들어 다음을 삽입합니다.
*/15 * * * * /path/to/script >> /path/to/log_\`date +%s\` 2>&1
cronjob
그러면 15분마다 해당 위치에서 실행되고 Unix 타임스탬프 접미사(예: 1549883612)가 있는 파일에서 발생할 수 있는 오류 /path/to/script
와 출력을 기록하는 스크립트가 생성됩니다 ./path/to/log_
답변2
음...Bash의 세부 사항을 숙달해야 합니다. :-) 이제 몇 백 야드 떨어져 있습니다.
이렇게 하면 시작됩니다.
#!/bin/bash
echo ----- reading one field at a time
for myhost in `cat ips`
do
echo $myhost
done
echo
echo ----- reading and printing one line at a time
while read line
do
echo $line
done < ips
echo ----- separating fields
while read line
do
ip=$( cut -d' ' -f1 <<< "$line" )
dev=$( cut -d' ' -f2 <<< "$line" )
cust=$( cut -d' ' -f3 <<< "$line" )
echo IP of device: $ip
echo device name: $dev
echo customer name: $cust
#do your ping here
echo
done < ips
관련 세부정보는 다음에서 확인할 수 있습니다.
$ 명 컷
$ man bash -> "SHELL BUILTIN COMMANDS" 섹션, 명령에 대한 하위 섹션
"<<<" 정보:
$ man bash -> "여기에 문자열" 섹션
또는 여기에서 문자열 대신 echo $line ...을 사용하십시오(<<<).
echo $line | cut -d' ' -f1 등