Intensiv DevOps-uddannelse · Lektion

Fejlfinding i Bash-scripts (set -x, trap)

Udforsk metoder til fejlfinding i Deres Bash-scripts, herunder sporing af udførelsen og brug af 'trap' til fejlhåndtering.

Lektion 1 af 411 trin

Fejlfinding i Bash-scripts (set -x, trap) er en gratis Intensiv DevOps-uddannelse-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Intensiv DevOps-uddannelse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.

Hvorfor fejlfinde dine scripts?

Selv de bedste scripts kan indeholde fejl! Fejlfinding er processen med at finde og rette disse fejl.

Det er en vigtig færdighed for enhver udvikler, fordi den hjælper dig med at forstå, hvad dit script gør trin for trin, og hvor noget kan gå galt.

I denne lektion lærer du effektive Bash-værktøjer til at spore udførelsen og håndtere uventede hændelser.

Spor dit script med `set -x`

Et af de enkleste og mest effektive fejlfindingsværktøjer i Bash er set -x. Det aktiverer kommandosporing.

  • Når det er aktivt, udskriver Bash hver kommando og dens argumenter til standardfejl (hvilket normalt betyder din terminal), lige før den udføres.
  • Dette output indeholder variablernes tilstand efter ekspansion, så du får et tydeligt billede af, hvad Bash er ved at gøre.
  • Det er som at se dit script blive udført i slowmotion!

Se `set -x` i funktion

Lad os se set -x i funktion. Bemærk, hvordan skallen udskriver hver kommando efter variabelekspansion med et +-tegn foran.

Prøv at køre dette eksempel:

#!/bin/bash

# Enable command tracing
set -x

NAME="Coddy"
MESSAGE="Hello, $NAME!"

echo $MESSAGE

# This command will intentionally fail
ls -l /nonexistent_directory

# Disable command tracing
set +x

echo "Tracing is now off."

Forstå sporingsoutput

Når set -x er aktiveret, ser du linjer, der begynder med symbolet +. Det angiver sporingsoutput.

  • Efter + kommer den kommando, Bash er ved at udføre, sammen med dens argumenter efter eventuelle variabel- eller kommandoerstatninger.
  • Det er utroligt nyttigt, når du vil se variablernes nøjagtige værdier og den præcise kommando, der køres.
  • Det hjælper med at lokalisere problemer som forkerte stier, tomme variabler eller utilsigtede kommandostrukturer.

Styr omfanget af `set -x`

Du har ikke altid brug for at spore hele dit script. Du kan aktivere set -x for bestemte afsnit:

  • Brug set -x til at slå sporing til.
  • Brug set +x til at slå sporing fra.

Det giver dig mulighed for at fokusere din fejlfindingsindsats på problematiske dele af dit script uden at blive overvældet af output fra stabile afsnit.

Håndter hændelser med `trap`

Kommandoen trap giver dig mulighed for at opfange signaler og andre hændelser og derefter udføre en kommando, når de forekommer. Det er nyttigt til:

  • Oprydning: Sikre, at midlertidige filer fjernes.
  • Fejlhåndtering: Reagere på kommandoer, der mislykkes.
  • Ordentlige afslutninger: Håndtere brugerafbrydelser som Ctrl+C.

Den grundlæggende syntaks er trap 'command_to_execute' SIGNAL_OR_EVENT.

Oprydning med `trap EXIT`

Pseudosignalet EXIT er særligt. En kommando, der er knyttet til EXIT, køres lige før dit script afsluttes, uanset hvordan det afsluttes (med succes, fejl eller afbrydelse).

Det er perfekt til oprydningsopgaver som at slette midlertidige filer. Prøv at køre dette script:

#!/bin/bash

TEMP_FILE="/tmp/coddy_temp_$(date +%s).txt"

# Trap the EXIT signal to remove the temp file
trap 'echo "Cleaning up: Removing $TEMP_FILE"; rm -f "$TEMP_FILE"' EXIT

echo "Script started. Creating temporary file..."
touch "$TEMP_FILE"
echo "Temporary file created: $TEMP_FILE"

# Simulate some work
sleep 2

echo "Script logic completed. Exiting..."

Opfang fejl med `trap ERR`

Pseudosignalet ERR udløses, når en kommando afsluttes med en status, der ikke er nul (det vil sige, når den mislykkes). Det giver dig mulighed for kun at udføre handlinger, når der opstår en fejl.

Bemærk: trap ERR fungerer kun, hvis kommandoen ikke er en del af en betingelse i if, while eller until, eller hvis dens returværdi ikke eksplicit kontrolleres (f.eks. command || true).

#!/bin/bash

# Trap ERR to report the error line number
trap 'echo "Error detected on line $LINENO! Exiting."' ERR

echo "Starting script with an intentional error..."

# This command will fail and trigger the ERR trap
ls /this/path/does/not/exist

echo "This line will NOT be reached if an error occurs."

Reagér på signaler (INT, TERM)

trap kan også opfange almindelige Linux-signaler. Nogle almindelige signaler er:

  • INT (afbrydelse): Sendes, når du trykker på Ctrl+C.
  • TERM (afslutning): En anmodning om at afslutte en proces på en ordentlig måde.

Ved at opfange disse signaler kan dit script udføre oprydning eller gemme tilstanden, før det lukkes ned, i stedet for at afslutte brat.

#!/bin/bash

# Trap INT (Ctrl+C) to exit gracefully
trap 'echo "\nCaught Ctrl+C! Exiting gracefully..."; exit 1' INT

echo "Running a continuous task. Press Ctrl+C to stop."

while true; do
  echo "Working... $(date)"
  sleep 3
done

Fejlfindingskontrol

Lad os kontrollere din forståelse af Bash-teknikker til fejlfinding.

Opsummering: Fejlfinding af dine scripts

Godt gået! Du har lært vigtige værktøjer til at fejlfinde dine Bash-scripts:

  • set -x: Aktiverer kommandosporing, så du kan se præcis, hvad Bash udfører. Brug set +x til at slå det fra.
  • trap: Giver dig mulighed for at udføre kommandoer som reaktion på bestemte hændelser eller signaler.
  • `trap EXIT`: Sikrer, at oprydningsopgaver køres, før scriptet afsluttes.
  • `trap ERR`: Opfanger kommandoer, der afsluttes med en status, der ikke er nul.
  • `trap INT`/`TERM`: Håndterer brugerafbrydelser eller anmodninger om afslutning på en ordentlig måde.

Når du mestrer disse teknikker, bliver du markant bedre til at fejlfinde og oprette robuste Bash-scripts!

Gratis at komme i gang

Lær Intensiv DevOps-uddannelse med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
142
Lektioner
568

Ofte stillede spørgsmål

Er lektionen “Fejlfinding i Bash-scripts (set -x, trap)” gratis?

Ja — alle 3 lektioner i læringssporet Intensiv DevOps-uddannelse, inklusive “Fejlfinding i Bash-scripts (set -x, trap)”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Fejlfinding i Bash-scripts (set -x, trap)”?

Udforsk metoder til fejlfinding i Deres Bash-scripts, herunder sporing af udførelsen og brug af 'trap' til fejlhåndtering. Du øver dig i Intensiv DevOps-uddannelse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Intensiv DevOps-uddannelse?

Der kræves ingen tidligere erfaring. Intensiv DevOps-uddannelse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Fejlfinding i Bash-scripts (set -x, trap)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Intensiv DevOps-uddannelse-lektion?

Ja. Alle Intensiv DevOps-uddannelse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Fejlfinding i Bash-scripts (set -x, trap)
  2. Fejlhåndtering og afslutningsstatus
  3. Bedste praksis for scripting og linting
  4. Test af Bash-scripts med Bats
← Tilbage til Intensiv DevOps-uddannelse