Fundamentos Prácticos de Shell Scripting en Bash: 16 Ejercicios Esenciales de Automatización

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,9 KB

SOU – Unix Based Operative Systems – Cod. 422

Página 2 de 4

Ejercicios Fundamentales de Shell Scripting (Bash)

1. Métodos de Ejecución de un Script

Cita por lo menos dos maneras distintas de ejecutar un script de shell.

sh script.sh
./script.sh (si el archivo tiene permisos de ejecución)

2. Script para Montar, Copiar y Desmontar Disquetera

Crear un script de Shell que monte la disquetera, copie todos los archivos (incluyendo subdirectorios) a un directorio que se pase como parámetro, y luego desmonte la disquetera.

mount –t vfat /dev/fd0 /media/floppy
cp -R /media/floppy $1
umount /media/floppy ó umount /dev/fd0

3. Listado de Nombres de Directorios

Crear un script de Shell que liste únicamente los nombres de los directorios que se encuentran a partir del directorio actual.

for i in `ls`; do
    if [ -d $i ]; then
        echo $i
    fi
done

4. Esperar y Terminar un Proceso Específico

Realizar un script que espere hasta que un determinado proceso se ejecute. Y cuando ese proceso se ejecuta, matarlo. (Ayuda: utilizar el comando killall).

while true; do
    if ps ax | grep $1 | grep -v ' grep '; then
        killall $1
    fi
done

Ejemplos de Control de Flujo y Variables

5. Ejemplo de Evaluación de Expresiones (Cadenas)

Ejemplo de evaluar expresiones

#!/bin/bash
if [ "petete" = "petete" ]; then
    echo "expresión evaluada como verdadera"
else
    echo "expresión evaluada como falsa"
fi

6. Ejemplo de Evaluación de Expresiones con Variables

#!/bin/bash
T1="petete"
T2="peteto"
if [ "$T1" = "$T2" ]; then
    echo "expresión evaluada como verdadera"
else
    echo "expresión evaluada como falsa"
fi

SOU – Unix Based Operative Systems – Cod. 422

Página 3 de 4

7. Copia de Archivos con Validación de Parámetros

Crear un script que reciba un directorio como primer parámetro, y a continuación una lista de archivos. El script debe validar que los parámetros recibidos sean realmente archivos y luego copiarlos al directorio recibido.

if [ -d $1 ]; then
    nombre_dir=$1
    shift
    for i in $*; do
        if [ -f $i ]; then
            cp $i $nombre_dir
        else
            echo "El archivo $i no es válido"
        fi
    done;
else
    echo "El primer parámetro debe ser un directorio!"
fi

8. Verificación de Permisos de Fichero

Crear un script que reciba un fichero como primer parámetro, y a continuación nos diga si tiene permiso de lectura, si es grabable, y si es ejecutable.

#!/bin/bash
echo "Características del archivo $1"
if [ -r $1 ]
then
    echo "El archivo $1 es legible"
fi
if [ -w $1 ]
then
    echo "El archivo $1 es grabable"
fi
if [ -x $1 ]
then
    echo "El archivo $1 es ejecutable"
fi

9. Validación y Visualización de Archivos

Recibir varios nombres de archivo como parámetros, y para cada uno validar si el nombre corresponde a un archivo existente y mostrar su contenido.

#!/bin/bash
for VAR in $*
do
    if [ -f $VAR ]
    then
        more $VAR
    else
        echo "No existe $VAR"
    fi
done

Manejo de Códigos de Retorno y Automatización

10. Valor de Retorno de Programas ($?)

Cuando un programa termina de ejecutarse, devuelve o retorna un valor. En el caso de los programas, el valor de retorno es un número. El valor es cero (0) si el programa finalizó con éxito o distinto de cero si el programa no finalizó con éxito.

En Bash, el valor de retorno del último programa o comando ejecutado queda almacenado en la variable especial $?.

Ejemplo:

#!/bin/bash
echo "Listando archivo existente..."
ls archivo_existente
echo "El valor de retorno fue: $?"
echo " "
echo "Listando archivo inexistente..."
ls archivo_inexistente
echo "El valor de retorno fue: $?"
exit

11. Detección de Cambio de Dirección IP Externa

Crear un script que detecte el cambio de la dirección IP externa de nuestra red y, cuando cambie, que nos envíe un correo electrónico.

#!/bin/bash
IPNEW=`wget www.cualesmiip.com > /dev/null 2> /dev/null && cat \index.html|grep "<b>Tu IP real es "|cut -d " " -f5`
IPOLD=`cat direccion_ip`
# echo "La IP actual es: $IPNEW"
# echo "La IP anterior es: $IPOLD"
if [ "$IPNEW" != "$IPOLD" ]; then
    echo "$IPNEW" > direccion_ip
    mailx -s "Cambio de IP" [email protected] <direccion_ip
    firm index.html
fi

Estructuras de Control Iterativas

SOU – Unix Based Operative Systems – Cod. 422

Página 4 de 4

12. Ejemplo de Bucle While

#!/bin/bash
CONTADOR=0
while [ $CONTADOR -lt 10 ]; do
    echo "El contador es $CONTADOR"
    let CONTADOR=CONTADOR+1
done

13. Ejemplo de Bucle Until

#!/bin/bash
CONTADOR=20
until [ $CONTADOR -lt 10 ]; do
    echo "CONTADOR $CONTADOR"
    let CONTADOR-=1
done

Referencia Rápida

14. Operadores Relacionales Aritméticos

Operadores relacionales aritméticos

  • -lt (<): Menor que
  • -gt (>): Mayor que
  • -le (<=): Menor o igual que
  • -ge (>=): Mayor o igual que
  • -eq (==): Igual que

15. Ejemplo: Script de Copia de Seguridad (Tar)

Un script de copia de seguridad

#!/bin/bash
ORIG="/home/"
DEST="/var/copias_de_seguridad/"
FICH=home-$(date +%Y%m%d).tgz
tar -xzvf $DEST$FICH $ORIG

16. Ejemplo: Script de Copia de Seguridad con ZIP

Un script de copia de seguridad con ZIP

#!/bin/bash
find / -type f -name "*.pptx" > PresentacionesPPT
zip comprimido $(cat PresentacionesPPT)

Entradas relacionadas: