.txt
5 개의 URL 이있는 파일이 있습니다. 한 줄씩 읽고 각 사이트에 대해 4 개의 ping 요청을 수행하고 시간을 추출하고 싶습니다. 내가 작성한 코드는 아래에 있지만 작동하지 않습니다.
누구든지 나에게 힌트를 줄 수 있습니까?
#!/bin/bash
cat /home/akis/Desktop/sites.txt
declare -i var=1
while read -r line
do
while $var <= 5
do
var2=$((var2+1))
name="$line" | ping -c 4 $name > $var.txt | awk '{ print $8 }' < $var.txt | awk '/time/' > $var2.txt | tr '=' '\t' < $var2.txt | awk '{ print $2 }' > $var2.txt
done
var=$((var+1))
done
이뿐 만 아니라 Sergiy의 답변 은 URL이있는 텍스트 파일을 통해 루프 에서 나왔고 각 .
파일 urls
이 현재 디렉토리에 있고 URL 만 한 줄에 하나씩 포함 한다고 가정합니다 .
#!/bin/bash
while IFS='' read -r l || [ -n "$l" ]; do
avg=$(ping -q -w 10 "$l" | sed '$!d;s_.*=[^/]*/\([^/]*\)/.*_\1_')
echo "Average respond time for $l: $avg ms" >> avg_time
done < "urls"
위의 스크립트는 avg
여기 에 명명 되었습니다.
$ cat urls
askubuntu.com
unix.stackexchange.com
stackoverflow.com
$ ./avg
$ cat avg_time
Average respond time for askubuntu.com: 37.742 ms
Average respond time for unix.stackexchange.com: 35.966 ms
Average respond time for stackoverflow.com: 38.982 ms
#!/bin/bash
bash
while IFS='' read -r l || [ -n "$l" ]; do stuff; done < "urls"
read
urls
한 줄씩 명명 된 파일 , 현재 처리 된 줄의 내용을 변수에 할당 l
하고이를 stuff
사용합니다.ping -q -w 10 "$l"
(= ping -qw10 "$l"
) 변수의 내용을 인수로 사용하고 옵션 uiet (필요하지 않은 출력이 적음) 및 (시간 초과 (초) )를 ping
l
-q
-w 10
10
man ping
avg=$(ping … | sed …)
파이프의 출력 ping
에 sed
있는 평균 응답 시간을 삭감 변수의 값이 저장avg
sed '$!d;s_.*=[^/]*/\([^/]*\)/.*_\1_'
sed '$!d
!
)을 d
생략 ( ) 하지 말고 $
나머지는 모두sed 's/a/b/'
s
ubstitute a
by b
– 예를 들어 sed 's_a_b_'
유용하다면 쓸 수도 있습니다 . 이렇게하면 문자열에서 리터럴 슬래시 문자를 이스케이프 할 필요가 없습니다.
.*
– 모든 것을=
및 /
– 리터럴 "="및 "/"[^/]*
– ( ^
)가 아닌 모든 것은 슬래시\([^/]*\)
– ( ^
) 가 아닌 모든 것을 슬래시로 가져와 그룹에 저장\1
– \(…\)
이전에 저장된 첫 번째 그룹awk -F/ '/^rtt/{print$5}'
.
-F/
– ield 구분자 /
로 정의F
/^rtt/{…}
- 라인 시작 (선택 ^
"RTT"와)를하고 어떻게 …
그것으로print$5
– print
필드 번호 만.5
echo "Average respond time for $l: $avg ms" >> avg_time
변수의 내용을 삽입 텍스트 인쇄 l
및 avg
상기 파일이 출력 리디렉션 avg_time
콘텐츠에 첨부
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다