domingo, 6 de mayo de 2012

SHELL SCRIPT que indica la VELOCIDAD de la RED


El siguiente shell script muestra la velocidad actual de subida y bajada de la interfaz de red que elijas.

Copia el shell script en un fichero llamado, por ejemplo: net_speed.sh.

A continuación configuramos los permisos de ejecución:
$chmod a+x net_speed.sh

El shell script se ejecuta pasándole como primer argumento la interfaz de red que quieres monitorear:
./net_speed.sh eth0

Obtendremos una línea, al ejecutarlo, como esta:
ppp0 DOWN:15 KB/s UP:880 B/s

Este script funciona parseando el archivo /proc/net/dev y calculando la diferencia entre los bytes transmitidos o recibidos actualmente y hace un segundo.

#!/bin/bash

# Este shell script muestra la velocidad de la red, tanto de subida como de subida como de bajada.

# Uso: net_speed.sh interface
# p.ej: net_speed.sh eth0


# Variables globales
interface=$1
received_bytes=""
old_received_bytes=""
transmitted_bytes=""
old_transmitted_bytes=""


# Esta función parsea el fichero /proc/nec/dev buscando una línea que contenga los datos de $interface.
# En esa línea, los números primero y noveno después de ':' son respectivamente los bytes recibidos y transmitidos.
function get_bytes
{
line=$(cat /proc/net/dev | grep $interface | cut -d ':' -f 2 | awk '{print "received_bytes="$1, "transmitted_bytes="$9}')
eval $line
}


# Función que calcula la velocidad usando el número de bytes actual y anterior.
# La velocidad se muestra en KBytes por secundo cuando es mayor o igual a 1 KByte por segundo.
# Esta funció se ejecuta cada segundo.
function get_velocity
{
value=$1
old_value=$2

let vel=$value-$old_value
let velKB=$vel/1000
if [ $velKB != 0 ];
then
echo -n "$velKB KB/s";
else
echo -n "$vel B/s";
fi
}

# Obtiene los valores iniciales.
get_bytes
old_received_bytes=$received_bytes
old_transmitted_bytes=$transmitted_bytes

# Muestra un mensaje y espera durante un segundo.
echo "Starting...";
sleep 1;
echo "";


# Bucle principal. Se repite sin fin.
while true;
do

# Obtiene los nuevos valores de bytes transmitidos y recibidos.
get_bytes

# Calcula las velocidades.
vel_recv=$(get_velocity $received_bytes $old_received_bytes)
vel_trans=$(get_velocity $transmitted_bytes $old_transmitted_bytes)

# Muestra los resultados en la consola.
echo -en "$interface DOWN:$vel_recv\tUP:$vel_trans\r"

# Actualiza los antiguos valores para realizar nuevos cálculos.calculations.
old_received_bytes=$received_bytes
old_transmitted_bytes=$transmitted_bytes

# Espera un segundo.
sleep 1;

done

TRADUCIDO DE:


Shell Script that shows Network Speed

1 comentario:

  1. De gran ayuda, sobretodo saber la ubicación del archivo /proc/net/dev, gracias!!!

    ResponderEliminar