Algunos scripts Bash útiles

Puestos a compartir información, pongo a continuación una serie de scripts Bash que utilizo en diferentes entornos.
Para poder utilizar estos scripts tienes que guardarlos dentro de un archivo de texto y darle permisos de ejecución:

chmod 750 nombrescript.sh

o bien

chmod +x nombrescript.sh

Nombre: makekernel.sh
Descripción: Obtiene la última versión del kernel, la descarga, la configura optimizándola para el procesador actual y construye el paquete .deb
Ejemplo: ./makekernel.sh

#!/bin/bash

echo Installing required packages to build the kernel...
apt-get update 1>/dev/null 2>&1
apt-get -y --force-yes install wget gcc build-essential fakeroot tar grep sed libncurses5-dev kernel-package libssl-dev 1>/dev/null 2>&1

#DESTARCH=`cc -### -march=native -x c - 2>&1 | grep -v native | grep march | xargs -n 1 | grep march | cut -d= -f2`
DESTPARAMS=`gcc -march=native -E -v - </dev/null 2>&1 | grep cc1 | cut -d\ -f9-`
DESTARCH=native

unset MAKEFLAGS

echo Looking for the latest kernel...
if [ -f /tmp/tmpkernel ]; then 
 rm /tmp/tmpkernel 
fi
wget -q -O /tmp/tmpkernel https://www.kernel.org

KERNELURL=`cat /tmp/tmpkernel | grep .tar | head -n 1 | cut -d\" -f 2`
KERNELPACKAGE=${KERNELURL##*/}
KERNELVERSION=${KERNELPACKAGE##*-}
KERNELVERSION="${KERNELVERSION%.*}"
KERNELVERSION="${KERNELVERSION%.*}"
KERNELDIR="${KERNELPACKAGE%.*}"
KERNELDIR="${KERNELDIR%.*}"
KERNELEXT="${KERNELPACKAGE##*.}"
MICONFIG=`ls -bt miconfig* 2>/dev/null | head -n 1`
if [ ! -f "${MICONFIG}" ]; then
 MICONFIG=`ls -bt /boot/config-* | head -n 1`
fi

rm -f linux-*.${KERNELEXT}
if [ -d linux ]; then
 echo Cleaning previous compilation...
 rm -rf linux
fi

echo Downloading kernel ${KERNELVERSION} from ${KERNELURL}...
wget ${KERNELURL} -q --show-progress -O ${KERNELPACKAGE}

echo Extracting...
tar -Jxf ${KERNELPACKAGE}
mv ${KERNELDIR} linux

echo Restoring configuration from ${MICONFIG}...
cp ${MICONFIG} linux/.config
cd linux

echo Tuning makefile...
sed -ri.bak 's/echo "\+"/#echo "\+"/' scripts/setlocalversion*
sed -ri.bak "s/\-O2/\-O3 \-march\=${DESTARCH} \-mtune\=${DESTARCH} \-pipe/g" Makefile
sed -ri.bak2 "s/\-Os/\-O3 \-march\=${DESTARCH} \-mtune\=${DESTARCH} \-pipe/g" Makefile

echo Running menu configuration tool...
make menuconfig

echo Making backup of config file: miconfig_${KERNELVERSION} ...
cp .config /usr/src/miconfig_${KERNELVERSION}

echo Building...
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-devel kernel_image kernel_headers

echo Done!
cd ..
ls -la linux*.deb

Nombre: aptkey.sh
Parámetros: 1º - identificador de la clave a descargar
Descripción: Obtiene una clave y la añade a apt, útil cuando se añade una nueva línea al sources.list
Ejemplo: ./aptkey.sh 13ABC01234

#!/bin/bash
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys "$1" || gpg --keyserver hkp://subkeys.pgp.net --recv-keys "$1"
gpg --export --armor "$1" | apt-key add -

Nombre: calcipv6.sh
Parámetros: 1º - IPv4
Descripción: Obtiene la dirección IPv6 equivalente a la pasada por parámetro
Ejemplo: ./calcipv6.sh 192.168.0.1

#!/bin/bash
printf "2002:%x%02x:%x%02x::\n" `echo $1 | sed 's/\./ /g'`

Nombre: createthumbnails.sh
Parámetros: 1º - ruta
Descripción: Crea una subcarpeta con thumbnails de las imágenes de la carpeta pasada por parámetro. Depende de ImageMagick.
Ejemplo: ./createthumbnails.sh .

#!/bin/bash
THUMBPATH="$1/thumbnails";
SIZE=200;
cd $1
mkdir -p $THUMBPATH
ls *.[jJ][pP][gG] | xargs -I {} convert -thumbnail $SIZE {} $THUMBPATH/{}
ls *.[gG][iI][fF] | xargs -I {} convert -thumbnail $SIZE {} $THUMBPATH/{}
ls *.[pP][nN][gG] | xargs -I {} convert -thumbnail $SIZE {} $THUMBPATH/{}

Nombre: download-web.sh
Parámetros: 1º - URL
Descripción: Crea una copia estática de una página web
Ejemplo: ./download-web.sh http://server/a/b/c/

#!/bin/bash
URL="$1";
[[ $URL != */ ]] && URL="$URL/";
TOTAL=$(( `echo "$URL" | grep -o / | wc -l` - 3 ));
#wget -nH --cut-dirs=$TOTAL --wait=1 --limit-rate=200K -np -r -p -k -U Mozilla $1 
wget -nH --cut-dirs=$TOTAL --wait=1 -np -r -p -k -U Mozilla $1

Nombre: hostup.sh
Parámetros: 1º - hostname
Descripción: Comprueba si un host está levantado (responde a un PING)
Ejemplo: ./hostup.sh localhost

#!/bin/bash

if [ $# == 0 ]; then
    echo "Too few parameters, please specify host to check."
    exit;
fi;

ESTADO=`ping -c 1 -W 1 $1 | grep "bytes from" | wc -l`;

if [ $ESTADO == 1 ]; then
    NOMBRE=`host $1 2>&1 | grep "does not exist" | wc -l`
    if [ $NOMBRE == 0 ]; then
        NOMBRE=`host $1 2>/dev/null | grep ame | cut -d  -f 5 | wc -l`;
        if [ $NOMBRE == 0 ]; then
            NOMBRE=`echo $1 | cut -d. -f 1-`;
        else
            NOMBRE=`host $1 2>/dev/null | grep ame | cut -d  -f 5 | cut -d. -f 1`;
        fi;
    else
        NOMBRE=$1;
    fi;
    echo "PONG from $NOMBRE";
fi;

Nombre: ifacespeed.sh
Parámetros: 1º - Interfaz de red
Descripción: Mide la velocidad a la que está trabajando una interfaz de red.
Ejemplo: ./ifacespeed.sh eth0

#!/bin/bash
IFACE=$1;
DOWN_PREV=`cat /sys/class/net/$IFACE/statistics/rx_bytes`;
UP_PREV=`cat /sys/class/net/$IFACE/statistics/tx_bytes`;
sleep 1;
DOWN_NOW=`cat /sys/class/net/$IFACE/statistics/rx_bytes`;
UP_NOW=`cat /sys/class/net/$IFACE/statistics/tx_bytes`;
DOWN_FINAL=$((($DOWN_NOW - $DOWN_PREV) / 1024));
UP_FINAL=$((($UP_NOW - $UP_PREV) / 1024));
echo "Download: $DOWN_FINAL kb/s";
echo "Upload: $UP_FINAL kb/s";

Nombre:  justcompile.sh
Parámetros: Ninguno
Descripción: Compila un kernel de linux usando todos los threads posibles según el procesador que tengamos. Se debe lanzar desde /usr/src, tener el código del kernel en la carpeta linux y el archivo de configuración .config. Depende de kernel-package.
Ejemplo: cd /usr/src && ./justcompile.sh

#!/bin/bash
unset MAKEFLAGS
cd linux
make-kpkg clean
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-devel kernel_image kernel_headers

Nombre:  puertos.sh
Parámetros: Ninguno
Descripción: Muestra los sockets (IPv4 e IPv6) abiertos por cada aplicación y a dónde están conectados.
Ejemplo: ./puertos.sh

#!/bin/bash
lsof -Pnl +M -i4
lsof -Pnl +M -i6

Nombre:  tts.sh
Parámetros: 1º - Frase a pronunciar.
Descripción: Pronuncia la frase pasada por parámetro usando festival (Text To Speech).
Ejemplo: ./tts.sh hola

#!/bin/bash
echo "$1 " | sed -e "s/á/a/g" | sed -e "s/é/e/g" | sed -e "s/í/i/g" | sed -e "s/ó/o/g" | sed -e "s/ú/u/g" | /usr/bin/festival --tts --language spanish

Nombre:  viewscheduler.sh
Parámetros: 1º - Unidad de disco a comprobar.
Descripción: Muestra el scheduler utilizado por el disco duro indicado por parámetro.
Ejemplo: ./viewscheduler.sh sda

#!/bin/bash
cat /sys/block/$1/queue/scheduler

Nombre:  websnap.sh
Parámetros: 1º - URL
Descripción: Crea un pantallazo de la web recibida por parámetro. Depende de vncserver, chromium-browser e ImageMagick. No necesita un servidor X en funcionamiento. Tarda 10 segundos para garantizar que la página esté completamente cargada.
Ejemplo: ./websnap.sh http://www.google.es

#!/bin/bash
export DISPLAY=":99"
WIDTH=1024
HEIGHT=768
/usr/bin/vncserver $DISPLAY -geometry ${WIDTH}x${HEIGHT} -depth 24 1>/dev/null 2>&1
/usr/bin/chromium-browser --kiosk --disable-translate --disable-new-tab-first-run --no-first-run --disable-sync --disk-cache-dir=/tmp --display $DISPLAY "$1" > /dev/null 2> /dev/null &
/bin/sleep 10
/usr/bin/import -window root -display $DISPLAY "$2"
killall -s9 chromium-browser 1>/dev/null 2>&1
/usr/bin/vncserver -kill $DISPLAY 1>/dev/null 2>&1