我通过 读取了带宽使用情况,它每秒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
如果值小于某个值,如何ifstat
在 bash 脚本中运行并将值读入变量以运行命令?if statement
例如,
if [ $in -lt 100 ] && [ $out -lt 100 ]
then
echo Network is slow.
else
echo Network is fast.
fi
如何读取ifstat
into$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
告诉 awk 仅当行号大于 2 时才处理花括号中的命令。这具有跳过标题行的效果。
if ($1+0<100 && $2+0<100)
测试第一个字段$
和第二个字段是否都$2
小于 100。如果小于,则print "Network is slow."
执行 then 。如果没有,则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