将此命令放入 bash 脚本中

将此命令放入 bash 脚本中

在谷歌的帮助下,测量多播流带宽的脚本。

这里是 tcpdump -tnn -i eth1 -f multicast | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10' & sleep 2s && pkill -HUP -f tcpdump

结果很好,只是我需要按回车键才能返回提示。我知道这是 && 的问题,但不知道如何修复它。

我如何将其转录为 shell 脚本。也许可以添加 $var 来表示秒数。

答案1

尝试timeout在一段时间后终止 tcpdump:

(timeout -s HUP 2 tcpdump -tnn -i eth1 -f multicast || true) | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10'

编写脚本:

#!/bin/bash

if ! [[ "$1" =~ ^[0-9]+$ ]]; then
        echo "Usage: $0 <number of seconds>"
        exit 1
fi

(timeout -s HUP $1 tcpdump -tnn -i eth1 -f multicast || true) | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10'

答案2

您不需要按回车键退出。这只是一个外观问题。这是因为您的输出“覆盖”了您的终端(您仍然可以输入任何命令并按回车键 - 它将被执行)。

要“修复”此布局问题,您可以尝试将“;sleep 1;echo”附加到您的行,使其看起来像这样:

tcpdump -tnn -i eth1 -f multicast | sort | uniq -c | awk '{print $3,"> "$5,$1*$NF/2*8/1024 " Kbps"}' | awk '$1 > 10' & sleep 2s && pkill -HUP -f tcpdump; sleep 1; echo

希望有所帮助。

这是带有变量的 bash 脚本:

#!/bin/bash

SLEEPTIME=5

tcpdump -tnn -i eth0 -f multicast | sort | uniq -c | awk -v a=$SLEEPTIME '{print $3,"> "$5,$1*$NF/a*8/1024 " Kbps"}' | awk '$1 > 10' & sleep $SLEEPTIME && pkill -HUP -f tcpdump; sleep 1; echo

相关内容