Bash:
Virheiden käsittely

Kuinka:

#!/bin/bash

# Ohjaa stderr tiedostoon
grep "jotakin" tiedosto.txt 2> virheet.log

# Virheenkäsittely poistumisstatuksilla
if ! grep "jotakin" tiedosto.txt; then
    echo "Hups, jotakin meni pieleen 'jotakin' etsiessä."
    exit 1
fi

# Käyttäen loukkua virhetilanteessa siivotaan ennen poistumista
cleanup() {
  echo "Siivotaan väliaikaiset tiedostot..."
  rm temp_*
}

trap cleanup ERR

# tahallinen virhe: tiedostoa ei ole olemassa
cat temp_tiedosto.txt

Esimerkkituloste kun virhe tapahtuu:

Siivotaan väliaikaiset tiedostot...
cat: temp_tiedosto.txt: Tiedostoa tai hakemistoa ei ole

Syväluotaus

Virheenkäsittely Bash-skriptauksessa juontaa juurensa Unix-komentotulkin alkuaikoihin, jolloin luotettavat ja kestävät skriptit olivat (ja ovat) elintärkeitä järjestelmien hallinnassa ja automaatioissa. Perinteisesti Bashissa virheet käsitellään tarkistamalla komennon poistumisstatus, joka konventioiden mukaan palauttaa 0 onnistumisesta ja muun kuin nollan epäonnistumisesta.

Bash esitteli trap-komennon sisäänrakennettuna, joka sallii käyttäjien määritellä komentoja suoritettavaksi erilaisissa signaaleissa tai skriptin poistumisen yhteydessä. Tämä on hyödyllistä esimerkiksi siivoustoimiin tai viimeiseksi keinoksi virheenkäsittelymekanismina.

On myös set-komento, jolla voidaan muuttaa Bashin toimintaa virhetilanteissa. Esimerkiksi set -e saa skriptin poistumaan välittömästi, jos mikä tahansa komento poistuu muulla kuin nollastatuksella, keino epäonnistua nopeasti ja välttää laajenevat virheet.

Vaihtoehtoja Bashin sisäiselle virheenkäsittelylle sisältävät mm. tiedostojen olemassaolon eksplisiittisen tarkistamisen, komentosubstituution käytön, tai jopa oman virheidenkäsittelyfunktioiden kirjoittamisen enemmän yksityiskohtiin menevälle käsittelylle.

Vaikka huolellinen virheenkäsittely voi joskus tuntua ylilyönniltä pienille skripteille, se on harjoitus, joka voi säästää paljon aikaa debuggauksessa ja estää odottamattomia käyttäytymisiä sekä sinulle että käyttäjille.

Katso Myös

Muista, skriptaus on taiteenlaji, ja se, miten käsittelet lipsahduksia ja kompastuksia, voi tehdä mestariteoksestasi kestävämmän. Onnellista skriptailua!