с помощью Google скрипт, который измеряет пропускную способность многоадресных потоков.
Вот 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
Оказывается, все в порядке, за исключением того, что мне нужно нажать Enter, чтобы вернуться к приглашению. Я знаю, что это проблема &&, но не знаю, как ее исправить.
Как я могу привязать его к сценарию оболочки. И, возможно, добавьте $ var для количества секунд.
Попробуйте использовать 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'
вам не нужно нажимать Enter для выхода. это просто косметический вопрос. это потому, что ваш вывод «перезаписывает» ваш терминал (вы все равно можете ввести любую команду и нажать Enter - она будет выполнена).
Чтобы «исправить» эту проблему с макетом, вы можете попробовать добавить в строку «; 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