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

#!/bin/bash
set -x

echo "Iniciant l'script"
var1="Hola"
var2="Món"
echo "$var1 $var2"

Explicació

  • set -x: Activa el mode de depuració.
  • echo "Iniciant l'script": Mostra un missatge a la pantalla.
  • var1="Hola" i var2="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

#!/bin/bash
set -x

echo "Iniciant l'script"
var1="Hola"
var2="Món"
echo "$var1 $var2"

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

  1. Crea un script que defineixi dues variables i les mostri a la pantalla.
  2. Activa el mode de depuració amb set -x.
  3. Executa l'script i observa la sortida.

Exercici 2: Gestió d'Errors amb -e

  1. Crea un script que intenti copiar un fitxer inexistent.
  2. Activa la gestió d'errors amb set -e.
  3. Executa l'script i observa el comportament.

Exercici 3: Captura d'Errors amb trap

  1. Crea un script que intenti copiar un fitxer inexistent.
  2. Utilitza trap per capturar l'error i mostrar un missatge personalitzat.
  3. Executa l'script i observa el comportament.

Solucions

Solució Exercici 1

#!/bin/bash
set -x

var1="Hola"
var2="Món"
echo "$var1 $var2"

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

Mòdul 2: Comandes Bàsiques de Linux

Mòdul 3: Habilitats Avançades de la Línia de Comandes

Mòdul 4: Scripting de Shell

Mòdul 5: Administració del Sistema

Mòdul 6: Xarxes i Seguretat

Mòdul 7: Temes Avançats

Mòdul 8: Projectes Pràctics

© Copyright 2024. Tots els drets reservats