간단한 통과 / 실패 테스트 스크립트를 만들려고하는데 아래에 설명 된대로 몇 가지 문제가 있습니다. 내 의도는 명령의 전체 결과 (예 : ping)를 results.txt
파일로 가져 와서 보관할뿐만 아니라 results.txt
문제가 감지되면 다른 검사를 위해 파일을 구문 분석하는 것입니다 .
#!/bin/bash
ping -c 20 google.com > results.txt
packetloss = `awk '/packet loss/{x=$6} END{print x}' results.txt`
echo "$packetloss" >> debug.txt
# if packetloss > 0, add to an error.txt to fail
# if avg ping time > 5ms, add to an error.txt to fail
packetloss 변수가 파일 에서 awk
정보를 가져 오지 않습니다 results.txt
(검토를 위해 디버그 파일로 전송). 이것을 막는 쉘 스크립팅과 관련된 해결 방법이 있는지 궁금합니다.
수동으로 실행 awk
에 results.txt
예상되는 결과를 반환 '0 %'.
주위에 공백이 허용되지 않습니다 =
!
그래서:
#!/bin/bash
ping -c 20 google.com > results.txt
packetloss=$(awk '/packet loss/{print $6}' results.txt)
echo "$packetloss" >> debug.txt
또는 더 짧게 :
ping -c 20 google.com |
awk '/packet loss/{sub(/%/, "");print $6 >> "debug.txt"}'
x
변수 를 할당 할 필요가 없습니다 . $6
직접 인쇄 할 수 있습니다.`예를 들어 다음과 같이 이전 스타일의 명령 대체에 사용됩니다.
foo =`명령`
foo=$(command)
구문 대신 좋습니다. 내부의 백 슬래시 처리 $()
는 덜 놀랍고 $()
중첩하기 쉽습니다.
http://mywiki.wooledge.org/BashFAQ/082 확인
ping -c 20 google.com |
perl -lne '/(\d+)%\s+packet\s+loss/ and print $1' >> debug.txt
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다