Goo*_*bot 6 bash shell-script stdout
我读取了带宽使用情况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
Run Code Online (Sandbox Code Playgroud)
如果值小于一个数量,如何ifstat在 bash 脚本中运行并将值读入变量if statement以运行命令?
例如,
if [ $in -lt 100 ] && [ $out -lt 100 ]
then
echo Network is slow.
else
echo Network is fast.
fi
Run Code Online (Sandbox Code Playgroud)
如何读取ifstatinto$in和$outvariables的输出以if statement每秒检查一次?
Joh*_*024 13
由于网速不是整数,所以需要辅以awk等其他工具来处理数字。尝试:
ifstat -ni wlp7s0 | awk 'NR>2{if ($1+0<100 && $2+0<100) print "Network is slow."; else print "Network is fast."}'
Run Code Online (Sandbox Code Playgroud)
或者,对于那些喜欢他们的命令分布在多行中的人:
ifstat -ni wlp7s0 | awk '
NR>2{
if ($1+0<100 && $2+0<100)
print "Network is slow."
else
print "Network is fast."
}'
Run Code Online (Sandbox Code Playgroud)
-n添加该选项ifstat以抑制标题行的周期性重复。
NR>2{...}告诉 awk 仅当行号NR大于 2时才处理花括号中的命令。这具有跳过标题行的效果。
if ($1+0<100 && $2+0<100)测试第一个字段$和第二个字段$2是否都小于 100。如果是,则print "Network is slow."执行。如果没有,则print "Network is fast."执行。
gle*_*man 13
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
Run Code Online (Sandbox Code Playgroud)