Skip to content

Instantly share code, notes, and snippets.

@typeon
Created September 8, 2017 07:43
Show Gist options
  • Select an option

  • Save typeon/bb654c57ea4f81513d8893b07aafba57 to your computer and use it in GitHub Desktop.

Select an option

Save typeon/bb654c57ea4f81513d8893b07aafba57 to your computer and use it in GitHub Desktop.
nicstat.sh
#!/bin/bash
#
# script for network traffic statistics
#
# 1.0.0 - 2017.09.08
#
# Copyleft by typeon@gmail.com
#
if [ "x$1" != "x" ]; then
#
# 숫자가 아니면 skip하기로.
#
interval_second=$1
else
interval_second=1
fi
declare -A prev_value
declare -A curr_value
while true; do
# cat /proc/net/dev
#
# $1, $2, $3, $4, $10, $11, $12
#
# $1 -> ~ Inter-, face
#
eval $(awk '
BEGIN {
array_no = 0
}
$1 !~ /Inter|face/ {
printf "curr_value[%d,0]=\"%s\"\n", array_no, $1
printf "curr_value[%d,1]=%s\n", array_no, $2
printf "curr_value[%d,2]=%s\n", array_no, $3
printf "curr_value[%d,3]=%s\n", array_no, $4
printf "curr_value[%d,4]=%s\n", array_no, $10
printf "curr_value[%d,5]=%s\n", array_no, $11
printf "curr_value[%d,6]=%s\n", array_no, $12
array_no++
}
END {
printf "array_cnt=%d\n", array_no - 1
}
' /proc/net/dev)
printf "Interface RX_KBytes/s RX_KPackets/s RX_Errs/s TX_KBytes/s TX_KPackets/s TX_Errs/s\n"
declare -a res_value
for ((i = 0; i <= $array_cnt; i++)); do
res_value[0]=${curr_value[$i,0]}
if [ "x${prev_value[$i,1]}" == "x" ]; then
prev_value[$i,1]=0
prev_value[$i,2]=0
prev_value[$i,3]=0
prev_value[$i,4]=0
prev_value[$i,5]=0
prev_value[$i,6]=0
fi
# 초당 속도 계산.
#
res_value[1]=$(echo "scale = 4; (${curr_value[$i,1]} - ${prev_value[$i,1]}) / ${interval_second} / 1024" | bc)
res_value[2]=$(echo "scale = 4; (${curr_value[$i,2]} - ${prev_value[$i,2]}) / ${interval_second} / 1024" | bc)
res_value[3]=$(echo "scale = 4; (${curr_value[$i,3]} - ${prev_value[$i,3]}) / ${interval_second}" | bc)
res_value[4]=$(echo "scale = 4; (${curr_value[$i,4]} - ${prev_value[$i,4]}) / ${interval_second} / 1024" | bc)
res_value[5]=$(echo "scale = 4; (${curr_value[$i,5]} - ${prev_value[$i,5]}) / ${interval_second} / 1024" | bc)
res_value[6]=$(echo "scale = 4; (${curr_value[$i,6]} - ${prev_value[$i,6]}) / ${interval_second}" | bc)
printf "%s\t%'13.2f %'13.2f%'10.2f %'13.2f %'13.2f %'9.2f\n" \
"${res_value[0]}" "${res_value[1]}" "${res_value[2]}" "${res_value[3]}" \
"${res_value[4]}" "${res_value[5]}" "${res_value[6]}"
for ((j=0; j <= 6; j++)); do
prev_value[$i,$j]=${curr_value[$i,$j]}
done
done
sleep $interval_second
done
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment