Felsökning av Bash-skript (set -x, trap)
Upptäck metoder för att felsöka dina Bash-skript, bland annat genom att spåra körningen och använda 'trap' för felhantering.
Felsökning av Bash-skript (set -x, trap) är en gratis lektion i Bemästra Linux-kommandoraden och Bash-skriptning på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Bemästra Linux-kommandoraden och Bash-skriptning, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bemästra Linux-kommandoraden och Bash-skriptning innehåller totalt 4 lektioner.
Varför felsöka dina skript?
Även de bästa skripten kan innehålla fel! Felsökning är processen att hitta och åtgärda dessa fel.
Det är en viktig färdighet för alla utvecklare och hjälper dig att förstå vad skriptet gör steg för steg och var något kan gå fel.
I den här lektionen får du lära dig kraftfulla Bash-verktyg för att spåra körningen och hantera oväntade händelser.
Spåra skriptet med `set -x`
Ett av de enklaste och mest effektiva felsökningsverktygen i Bash är set -x. Det aktiverar kommandospårning.
- När funktionen är aktiv skriver Bash ut varje kommando och dess argument till standardfel (vilket vanligtvis innebär er terminal) precis innan det körs.
- Utdata innehåller variablernas värden efter expansion, vilket ger er en tydlig bild av vad Bash kommer att göra.
- Det är som att se skriptet köras i slow motion!
Se `set -x` fungera
Låt oss se set -x i praktiken. Lägg märke till hur skalet skriver ut varje kommando efter variabelexpansionen, med ett +-tecken framför.
Prova att köra följande exempel:
#!/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."Förstå spårningsutdata
När set -x är aktiverat ser ni rader som börjar med symbolen +. Det anger spårningsutdata.
- Efter
+kommer kommandot som Bash ska köra, tillsammans med dess argument efter eventuella variabel- eller kommandosubstitutioner. - Detta är mycket användbart för att se variablernas exakta värden och vilket kommando som faktiskt körs.
- Det hjälper er att hitta problem som felaktiga sökvägar, tomma variabler eller oavsiktliga kommandostrukturer.
Styra omfånget för `set -x`
Ni behöver inte alltid spåra hela skriptet. Ni kan aktivera set -x för specifika delar:
- Använd
set -xför att slå på spårningen. - Använd
set +xför att slå av spårningen.
På så sätt kan ni fokusera felsökningen på problematiska delar av skriptet utan att överväldigas av utdata från stabila delar.
Hantera händelser med `trap`
Med kommandot trap kan ni fånga signaler och andra händelser och sedan köra ett kommando när de inträffar. Det är användbart för:
- Rensning: Säkerställa att temporära filer tas bort.
- Felhantering: Reagera på kommandon som misslyckas.
- Kontrollerade avslut: Hantera användaravbrott som Ctrl+C.
Den grundläggande syntaxen är trap 'command_to_execute' SIGNAL_OR_EVENT.
Rensa upp med `trap EXIT`
Pseudosignalen EXIT är speciell. Ett kommando som fångas med EXIT körs precis innan skriptet avslutas, oavsett hur det avslutas (lyckat, misslyckat eller genom ett avbrott).
Det passar perfekt för rensningsuppgifter, som att ta bort temporära filer. Prova att köra följande skript:
#!/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..."Fånga fel med `trap ERR`
Pseudosignalen ERR utlöses när ett kommando avslutas med en status som inte är noll (det vill säga när det misslyckas). Det gör att ni kan utföra åtgärder specifikt när ett fel inträffar.
Obs! trap ERR fungerar bara om kommandot inte ingår i ett villkor med if, while eller until, eller om returvärdet inte uttryckligen kontrolleras (till exempel 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."Reagera på signaler (INT, TERM)
trap kan även fånga vanliga Linux-signaler. Några vanliga signaler är:
INT(avbrott): Skickas när ni trycker påCtrl+C.TERM(avslut): En begäran om att avsluta en process på ett kontrollerat sätt.
Genom att fånga dessa signaler kan skriptet rensa upp eller spara sitt tillstånd innan det stängs av, i stället för att avslutas abrupt.
#!/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
doneKontroll av felsökning
Låt oss kontrollera hur väl ni har förstått Bash-tekniker för felsökning.
Sammanfattning: felsök era skript
Bra jobbat! Ni har lärt er viktiga verktyg för att felsöka Bash-skript:
set -x: Aktiverar kommandospårning och visar exakt vad Bash kör. Användset +xför att stänga av den.trap: Gör att ni kan köra kommandon som svar på specifika händelser eller signaler.- `trap EXIT`: Säkerställer att rensningsuppgifter körs innan skriptet avslutas.
- `trap ERR`: Fångar kommandon som avslutas med en status som inte är noll.
- `trap INT`/`TERM`: Hanterar användaravbrott eller avslutningsbegäranden på ett kontrollerat sätt.
Om ni behärskar dessa tekniker förbättras er förmåga att felsöka och skapa robusta Bash-skript avsevärt!
Lär dig Bash med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 22
- Lektioner
- 88
Vanliga frågor
Är lektionen ”Felsökning av Bash-skript (set -x, trap)” gratis?
Ja – hela texten till ”Felsökning av Bash-skript (set -x, trap)” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Bemästra Linux-kommandoraden och Bash-skriptning, kan Ni uppgradera till CoddyKit PRO. Kursen i Bemästra Linux-kommandoraden och Bash-skriptning innehåller totalt 4 lektioner.
Vad lär jag mig i ”Felsökning av Bash-skript (set -x, trap)”?
Upptäck metoder för att felsöka dina Bash-skript, bland annat genom att spåra körningen och använda 'trap' för felhantering. Ni övar på Bemästra Linux-kommandoraden och Bash-skriptning med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Bemästra Linux-kommandoraden och Bash-skriptning?
Du behöver inga förkunskaper. Utbildningen i Bemästra Linux-kommandoraden och Bash-skriptning på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Felsökning av Bash-skript (set -x, trap)”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Bemästra Linux-kommandoraden och Bash-skriptning-lektionen?
Ja. Varje Bemästra Linux-kommandoraden och Bash-skriptning-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Felsökning av Bash-skript (set -x, trap)
- Felhantering och avslutningsstatus
- Bästa praxis för skriptning och lintning
- Testa Bash-skript med Bats