use do, while para hacer un bucle para cada adaptador de red

use do, while para hacer un bucle para cada adaptador de red

Quiero obtener RX y TX de cada adaptador de red, así que para obtener RX y TX de un adaptador de red, utilicé estos comandos:

cat /proc/net/dev | grep 'wlan0' |awk  '{if ($2) print $2}' |  awk -v var="$(date +"%Y-%m-%d %r")" '{print  $1"&",var";"}' >> /opt/baran/log/baran_RX_usage_$(date +"%Y-%m-%d");
cat /proc/net/dev | grep 'wlan0' |awk  '{if ($10) print $10}' |  awk -v var="$(date +"%Y-%m-%d %r")" '{print  $1"&",var";"}' >> /opt/baran/log/baran_TX_usage_$(date +"%Y-%m-%d");

Como puede ver, puse el resultado en un archivo con fecha (diariamente). Quiero que esto en un bucle while obtenga todos los adaptadores de red en lugar de solo wlan0, por lo que debemos tener algunos archivos de registro como:

opt/baran/log/baran_TX_usage_wlan0_2014-01-01
opt/baran/log/baran_RX_usage_wlan0_2014-01-01
opt/baran/log/baran_TX_usage_eth0_2014-01-01
opt/baran/log/baran_RX_usage_eth0_2014-01-01
opt/baran/log/baran_TX_usage_eth1_2014-01-01
opt/baran/log/baran_RX_usage_eth1_2014-01-01
opt/baran/log/baran_TX_usage_eth2_2014-01-01
opt/baran/log/baran_RX_usage_eth2_2014-01-01
opt/baran/log/baran_TX_usage_eth3_2014-01-01
opt/baran/log/baran_RX_usage_eth3_2014-01-01

Como puede ver, tengo un adaptador inalámbrico y 4 eth, y quiero un archivo de registro para cada uno de ellos diariamente.

Gracias

Respuesta1

¿Qué tal si utilizamos API del kernel más sencillas?

for iface in /sys/class/net/*; do
     # might want to filter out the 'lo' interface

     read rx_bytes < "$iface"/statistics/rx_bytes
     read tx_bytes < "$iface"/statistics/tx_bytes

     day="$(date +"%Y-%m-%d")"
     time="$(date +"%r")"

     printf "%s& %s %s;"  "$rx_bytes" "$day" "$time" >> /opt/baran/log/baran_RX_usage_"$day"
     printf "%s& %s %s;"  "$tx_bytes" "$day" "$time" >> /opt/baran/log/baran_TX_usage_"$day"
done

información relacionada