51 lines
1.6 KiB
Bash
Executable file
51 lines
1.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
#shows traffic on the specified device
|
|
|
|
while :; do
|
|
function human_readable {
|
|
VALUE=$1
|
|
BIGGIFIERS=(B K M G)
|
|
CURRENT_BIGGIFIER=0
|
|
while [ $VALUE -gt 10000 ]; do
|
|
VALUE=$(($VALUE / 1000))
|
|
CURRENT_BIGGIFIER=$((CURRENT_BIGGIFIER + 1))
|
|
done
|
|
#echo "value: $VALUE"
|
|
#echo "biggifier: ${BIGGIFIERS[$CURRENT_BIGGIFIER]}"
|
|
echo "$VALUE${BIGGIFIERS[$CURRENT_BIGGIFIER]}"
|
|
}
|
|
|
|
###CHECKS####
|
|
|
|
DEVICE=$1
|
|
IS_GOOD=0
|
|
for GOOD_DEVICE in $(grep ":" /proc/net/dev | awk '{print $1}' | sed s/:.*//); do
|
|
if [ "$DEVICE" = "$GOOD_DEVICE" ]; then
|
|
IS_GOOD=1
|
|
break
|
|
fi
|
|
done
|
|
if [ $IS_GOOD -eq 0 ]; then
|
|
echo "Device $DEVICE not found. Should be one of these:"
|
|
grep ":" /proc/net/dev | awk '{print $1}' | sed s/:.*//
|
|
exit 1
|
|
fi
|
|
|
|
###REAL STUFF
|
|
LINE=$(grep $1 /proc/net/dev | sed s/.*://)
|
|
RECEIVED=$(echo $LINE | awk '{print $1}')
|
|
TRANSMITTED=$(echo $LINE | awk '{print $9}')
|
|
TOTAL=$(($RECEIVED + $TRANSMITTED))
|
|
|
|
SLP=1
|
|
sleep $SLP
|
|
|
|
LINE=$(grep $1 /proc/net/dev | sed s/.*://)
|
|
RECEIVED=$(echo $LINE | awk '{print $1}')
|
|
TRANSMITTED=$(echo $LINE | awk '{print $9}')
|
|
SPEED=$((($RECEIVED + $TRANSMITTED - $TOTAL) / $SLP))
|
|
|
|
echo "Current speed: $(human_readable $SPEED)/s"
|
|
done
|