En aquest tema, aprendrem com depurar scripts de shell i gestionar errors de manera eficient. La depuració és una habilitat essencial per identificar i corregir errors en els scripts, mentre que la gestió d'errors ens permet manejar situacions inesperades de manera controlada.
Continguts
Introducció a la Depuració
La depuració és el procés de trobar i corregir errors en un script. Els errors poden ser de sintaxi, lògica o d'execució. La depuració ens ajuda a entendre el comportament del nostre script i a identificar on es produeixen els problemes.
Ús de l'Opció -x
per a la Depuració
L'opció -x
del shell ens permet veure cada comanda que s'executa juntament amb els seus arguments. Això és molt útil per seguir el flux del nostre script i identificar on es produeixen els errors.
Exemple
Explicació
set -x
: Activa el mode de depuració.echo "Iniciant l'script"
: Mostra un missatge a la pantalla.var1="Hola"
ivar2="Món"
: Assigna valors a les variables.echo "$var1 $var2"
: Mostra el contingut de les variables.
Quan executem aquest script, veurem cada comanda que s'executa juntament amb els seus arguments.
Ús de l'Opció -e
per a la Gestió d'Errors
L'opció -e
fa que el script es detingui immediatament si una comanda retorna un codi d'error diferent de zero. Això és útil per evitar que el script continuï executant-se després d'un error.
Exemple
#!/bin/bash set -e echo "Iniciant l'script" cp fitxer_inexistent.txt /destinacio/ echo "Aquesta línia no s'executarà si hi ha un error"
Explicació
set -e
: Activa la gestió d'errors.echo "Iniciant l'script"
: Mostra un missatge a la pantalla.cp fitxer_inexistent.txt /destinacio/
: Intenta copiar un fitxer inexistent.echo "Aquesta línia no s'executarà si hi ha un error"
: Aquesta línia no s'executarà si la comanda anterior falla.
Captura d'Errors amb trap
La comanda trap
ens permet capturar senyals i errors específics i executar una funció o comanda quan es produeixen. Això és útil per netejar recursos o mostrar missatges d'error personalitzats.
Exemple
#!/bin/bash trap 'echo "S'ha produït un error"; exit 1' ERR echo "Iniciant l'script" cp fitxer_inexistent.txt /destinacio/ echo "Aquesta línia no s'executarà si hi ha un error"
Explicació
trap 'echo "S'ha produït un error"; exit 1' ERR
: Captura qualsevol error i executa les comandes especificades.echo "Iniciant l'script"
: Mostra un missatge a la pantalla.cp fitxer_inexistent.txt /destinacio/
: Intenta copiar un fitxer inexistent.echo "Aquesta línia no s'executarà si hi ha un error"
: Aquesta línia no s'executarà si la comanda anterior falla.
Exemples Pràctics
Exemple 1: Depuració amb -x
Exemple 2: Gestió d'Errors amb -e
#!/bin/bash set -e echo "Iniciant l'script" cp fitxer_inexistent.txt /destinacio/ echo "Aquesta línia no s'executarà si hi ha un error"
Exemple 3: Captura d'Errors amb trap
#!/bin/bash trap 'echo "S'ha produït un error"; exit 1' ERR echo "Iniciant l'script" cp fitxer_inexistent.txt /destinacio/ echo "Aquesta línia no s'executarà si hi ha un error"
Exercicis Pràctics
Exercici 1: Depuració amb -x
- Crea un script que defineixi dues variables i les mostri a la pantalla.
- Activa el mode de depuració amb
set -x
. - Executa l'script i observa la sortida.
Exercici 2: Gestió d'Errors amb -e
- Crea un script que intenti copiar un fitxer inexistent.
- Activa la gestió d'errors amb
set -e
. - Executa l'script i observa el comportament.
Exercici 3: Captura d'Errors amb trap
- Crea un script que intenti copiar un fitxer inexistent.
- Utilitza
trap
per capturar l'error i mostrar un missatge personalitzat. - Executa l'script i observa el comportament.
Solucions
Solució Exercici 1
Solució Exercici 2
#!/bin/bash set -e cp fitxer_inexistent.txt /destinacio/ echo "Aquesta línia no s'executarà si hi ha un error"
Solució Exercici 3
#!/bin/bash trap 'echo "S'ha produït un error"; exit 1' ERR cp fitxer_inexistent.txt /destinacio/ echo "Aquesta línia no s'executarà si hi ha un error"
Conclusió
En aquesta secció, hem après com depurar scripts de shell i gestionar errors de manera eficient. Hem vist com utilitzar les opcions -x
i -e
, així com la comanda trap
per capturar errors. La depuració i la gestió d'errors són habilitats essencials per a qualsevol programador de shell, ja que ens permeten identificar i corregir problemes de manera ràpida i eficient.
Domini de Linux: De Principiant a Avançat
Mòdul 1: Introducció a Linux
- Què és Linux?
- Història de Linux
- Distribucions de Linux
- Instal·lant Linux
- Estructura del Sistema de Fitxers de Linux
Mòdul 2: Comandes Bàsiques de Linux
- Introducció a la Línia de Comandes
- Navegant pel Sistema de Fitxers
- Operacions amb Fitxers i Directoris
- Visualització i Edició de Fitxers
- Permisos i Propietat dels Fitxers
Mòdul 3: Habilitats Avançades de la Línia de Comandes
- Ús de Comodins i Expressions Regulars
- Piping i Redirecció
- Gestió de Processos
- Programació de Tasques amb Cron
- Comandes de Xarxa
Mòdul 4: Scripting de Shell
- Introducció al Scripting de Shell
- Variables i Tipus de Dades
- Estructures de Control
- Funcions i Biblioteques
- Depuració i Gestió d'Errors
Mòdul 5: Administració del Sistema
- Gestió d'Usuaris i Grups
- Gestió de Discs
- Gestió de Paquets
- Monitorització del Sistema i Optimització del Rendiment
- Còpia de Seguretat i Restauració
Mòdul 6: Xarxes i Seguretat
- Configuració de Xarxa
- Tallafocs i Seguretat
- SSH i Accés Remot
- Sistemes de Detecció d'Intrusions
- Assegurant Sistemes Linux
Mòdul 7: Temes Avançats
- Virtualització amb Linux
- Contenidors de Linux i Docker
- Automatització amb Ansible
- Optimització del Nucli de Linux
- Alta Disponibilitat i Balanceig de Càrrega