Cómo capturar un error en la ejecución de un Shell Script (sh) en Linux. Como ejemplo, obtenemos el mensaje del error (si se produce) y lo enviamos por correo electrónico. Este procedimiento es válido para cuando queremos ejecutar unos comandos concretos si se produce un error u otros diferentes si no se produjera. Mostramos también el uso de un condicional (if) en el shell script.
- Shell Script sh en Linux para capturar errores.
- Ejecución del script en Linux y el resultado de la ejecución (texto por pantalla y envío de mail).
Shell Script sh en Linux para capturar errores
A continuación, mostramos el script sh completo de ejemplo de captura de errores, con cada línea principal comentada indicando su funcionamiento:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash echo "Copiando fichero..." #Ejecutamos el comando cp... y guardamos el resultado en la variable "resultado" resultado=`cp /home/oracle/log_export.log /backup/oracle 2>&1` echo "Fin del proceso de copia..." # Hacemos un condicional, si el resultado es vacío es que no se ha producido error if [[ $resultado == "" || $resultado == null ]] then mensaje="Fichero copiado correctamente." echo "Aquí se pueden añadir más líneas de comandos..." echo "Se ejecutarán únicamente si el resultado ha sido correcto." else mensaje="Error al copiar fichero: $resultado" echo "Y aquí también..." echo "Se ejecutarán únicamente si el resultado ha sido incorrecto." fi # Mostramos el resultado de la ejecución del comando por pantalla echo $mensaje #Enviamos por mail el resultado de la ejecución del comando echo "Resultado de la copia de fichero: $mensaje" | mail -s "Copia de fichero..." alonso@alonso.com |
Explicamos lo que hace el script anterior:
- En primer lugar muestra por pantalla «Copiando fichero…».
- Copia el fichero /home/oracle/log_export.log a /backup/oracle. Almacena en la variable «resultado» el resultado de la ejecución del comando anterior.
- Muestra por pantalla «Fin del proceso de copia…».
- Ejecuta una sentencia condicional, si la variable «resultado» no tiene valor es porque no se ha producido error al copiar el fichero. Por ello, si está vacía realizará lo siguiente:
- Almacena el texto «Fichero copiado correctamente.» en la variable «mensaje».
- Muestra por pantalla el texto: «Aquí se pueden añadir más líneas de comandos…».
- Muestra por pantalla el texto: «Se ejecutarán únicamente si el resultado ha sido correcto.».
- En caso de contener algún valor la variable «resultado», indicará que se ha producido un error. En este caso, se realizarán las siguientes acciones:
- Almacena el texto «Error al copiar fichero: resultado», donde «resultado» mostrará el error que se ha producido.
- Muestra por pantalla el texto: «Y aquí también…».
- Muestra por pantalla el texto: «Se ejecutarán únicamente si el resultado ha sido incorrecto.».
- Muestra el texto contenido en la variable «mensaje» por pantalla.
- Envía un correo electrónico al destinatario alonso@alonso.com con el valor de la variable «mensaje», que enviará:
- Si se ha producido error: Resultado de la copia de fichero: Error al copiar fichero: error producido.
- Si no se ha producido error: Resultado de la copia de fichero: Fichero copiado correctamente.
Ejecución del script en Linux y el resultado de la ejecución (texto por pantalla y envío de mail)
Si guardamos el contenido del script anterior en un fichero llamado prueba_captura_error.sh y lo ejecutamos con el comando:
1 |
sh prueba_captura_error.sh |
Si no se ha producido error devolverá:
Y el correo electrónico:
En caso de producirse error, la salida por pantalla será:
Y el correo electrónico que se envía: