나는 대역폭 사용량을 읽고 ifstat
매초마다 다운로드 및 업로드를 인쇄합니다.STDOUT
ifstat -i wlp7s0
wlp7s0
KB/s in KB/s out
1390.13 81.20
1039.14 74.05
1810.63 102.08
865.60 183.15
1272.91 274.19
1174.00 400.04
bash 스크립트에서 명령을 실행하고 값이 특정 값보다 작은 경우 어떻게 ifstat
값을 변수로 읽을 수 있습니까?if statement
예를 들어,
if [ $in -lt 100 ] && [ $out -lt 100 ]
then
echo Network is slow.
else
echo Network is fast.
fi
매초 확인하기 위해 출력을 변수 로 ifstat
읽는 방법은 무엇입니까 ?$in
$out
if statement
답변1
네트워크 속도는 정수가 아니기 때문에 수치를 계산하려면 다른 도구(예: awk)로 이를 보완해야 합니다. 노력하다:
ifstat -ni wlp7s0 | awk 'NR>2{if ($1+0<100 && $2+0<100) print "Network is slow."; else print "Network is fast."}'
또는 여러 줄에 걸쳐 명령을 분산시키려는 경우:
ifstat -ni wlp7s0 | awk '
NR>2{
if ($1+0<100 && $2+0<100)
print "Network is slow."
else
print "Network is fast."
}'
어떻게 작동하나요?
이 옵션은 헤더 행의 주기적 반복을 억제하기 -n
위해 추가되었습니다 .ifstat
NR>2{...}
NR
행 번호가 2보다 큰 경우에만 중괄호로 묶인 명령을 처리하도록 awk에 지시합니다. 이는 헤더 행을 건너뛰는 효과가 있습니다.
if ($1+0<100 && $2+0<100)
첫 번째 필드 $
와 두 번째 필드가 모두 $2
100보다 작은지 테스트합니다. 미만이면 print "Network is slow."
실행합니다. 그렇지 않은 경우 print "Network is fast."
실행하십시오.
답변2
John1024는 부동 소수점 숫자에 대해서는 옳지만 숫자를 자를 수 있습니다. 일반 bash 사용:
n=0
LC_NUMERIC=C ifstat -i $interface \
| while read -r in out; do
((++n < 2)) && continue # skip the header
if (( ${in%.*} < 100 && ${out%.*} < 100 )); then
echo Network is slow.
else
echo Network is fast.
fi
done