Linux-kommandolinjen og Bash-scripting på ekspertniveau · Lektion

Fejlhåndtering og afslutningsstatus

Implementér robust fejlkontrol i Deres scripts ved at forstå afslutningsstatusser og bruge 'set -e' samt betinget logik.

Lektion 2 af 411 trin

Fejlhåndtering og afslutningsstatus er en gratis Linux-kommandolinjen og Bash-scripting på ekspertniveau-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Linux-kommandolinjen og Bash-scripting på ekspertniveau, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Linux-kommandolinjen og Bash-scripting på ekspertniveau-kurset indeholder 4 lektioner i alt.

Velkommen til fejlhåndtering

I denne lektion gør vi dine Bash-scripts mere robuste ved at lære, hvordan du håndterer fejl effektivt.

Forestil dig et script, der udfører mange trin. Hvis ét trin mislykkes, vil du gerne have, at scriptet stopper eller i det mindste opdager fejlen, ikke? Det er her, fejlhåndtering kommer ind i billedet!

Hvad er en afslutningsstatus?

Hver kommando, du kører i Linux-skallen, returnerer en afslutningsstatus (som sommetider kaldes en afslutningskode eller returkode).

  • En status på 0 betyder, at kommandoen blev gennemført korrekt.
  • En status, der er forskellig fra nul (f.eks. 1, 2 eller 127), angiver en form for fejl.

Det fungerer som et trafiklys for dine kommandoer!

Kontrollér afslutningsstatus manuelt

Du kan kontrollere afslutningsstatussen for den senest udførte kommando ved hjælp af den særlige variabel $?.

Lad os prøve en kommando, der lykkes, og en, der mislykkes:

#!/bin/bash

echo "Hello CoddyKit"
echo "Exit status: $?"

ls non_existent_file.txt
echo "Exit status: $?"

Grundlæggende betinget fejlkontrol

Når du kender afslutningsstatussen, kan dit script træffe beslutninger. Du kan bruge en if-sætning til at kontrollere $? og reagere på fejl.

Det gør dit script opmærksomt på problemer og forhindrer det i at fortsætte med ugyldige data.

#!/bin/bash

ls non_existent_file.txt

if [ $? -ne 0 ]; then
  echo "Error: The 'ls' command failed!"
  exit 1 # Exit script with an error code
fi

echo "This line will not run if 'ls' fails."

Styrken ved `set -e`

Det kan være besværligt at kontrollere $? efter hver kommando manuelt. Det er her, set -e er nyttig!

Når du starter et script med set -e, afslutter Bash med det samme, hvis en kommando (som ikke er en del af en betinget test) afsluttes med en status, der ikke er nul.

Det fungerer som en global sikkerhedsafbryder for dine scripts!

`set -e` i funktion

Lad os se, hvordan set -e forhindrer et script i at fortsætte efter en fejl. Bemærk, hvordan den afsluttende echo-kommando aldrig nås.

#!/bin/bash
set -e

echo "Starting important tasks..."

# This command will fail
cp /non_existent_source /tmp/destination

echo "This line will NOT be printed if 'cp' fails."
echo "All tasks completed successfully."

Når `set -e` ikke stopper

set -e er effektiv, men har bestemte regler. Det får ikke scriptet til at afslutte, hvis den kommando, der mislykkes, er:

  • En del af en betingelse i if eller while.
  • En del af en &&- eller ||-liste (bortset fra den sidste kommando).
  • Forudgået af !.

Disse sammenhænge er beregnet til at teste, om noget lykkes eller mislykkes, så `set -e` blander sig ikke.

Kombinér `set -e` med `||`

Nogle gange vil du vise en brugerdefineret fejlmeddelelse, før scriptet afsluttes. Du kan kombinere set -e med ||-operatoren (ELLER).

command || { echo "Error message"; exit 1; }

Hvis command mislykkes, udføres delen efter ||, din meddelelse udskrives, og scriptet afsluttes derefter med en bestemt fejlkode.

#!/bin/bash
set -e

echo "Attempting to find a file..."

find /non_existent_dir -name "*.txt" || \
  { echo "ERROR: Could not search in /non_existent_dir!"; exit 1; }

echo "Script continued (this won't print if 'find' fails)."

Håndtering af bestemte afslutningskoder

Selvom 0 betyder succes, og en status, der ikke er nul, betyder fejl, kan bestemte koder, der ikke er nul, have forskellige betydninger.

  • 1: Generel fejl.
  • 2: Forkert brug af indbyggede skal-kommandoer.
  • 127: Kommandoen blev ikke fundet.

Du kan bruge if [ $? -eq 127 ] til at kontrollere bestemte fejltyper og dermed give mere målrettede fejlmeddelelser.

Quiz om fejlhåndtering

Hvilket af følgende udsagn om Bash-afslutningsstatusser og fejlhåndtering er SANDT?

Opsummering: Robuste scripts

Du har lært, hvordan du gør dine Bash-scripts langt mere pålidelige!

  • Hver kommando returnerer en afslutningsstatus (0 ved succes, en status, der ikke er nul, ved fejl).
  • Variablen $? giver dig den seneste kommandos afslutningsstatus.
  • set -e er et effektivt værktøj, der automatisk afslutter dit script ved de fleste fejl i kommandoer.
  • Kombinér set -e med || for at vise brugerdefinerede fejlmeddelelser.

Ved at bruge disse teknikker kan du skrive mere professionelle og stabile scripts.

Gratis at komme i gang

Lær Bash 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
22
Lektioner
88

Ofte stillede spørgsmål

Er lektionen “Fejlhåndtering og afslutningsstatus” gratis?

Ja — hele teksten til “Fejlhåndtering og afslutningsstatus” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Linux-kommandolinjen og Bash-scripting på ekspertniveau-kurset, skal du opgradere til CoddyKit PRO. Linux-kommandolinjen og Bash-scripting på ekspertniveau-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Fejlhåndtering og afslutningsstatus”?

Implementér robust fejlkontrol i Deres scripts ved at forstå afslutningsstatusser og bruge 'set -e' samt betinget logik. Du øver dig i Linux-kommandolinjen og Bash-scripting på ekspertniveau 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å Linux-kommandolinjen og Bash-scripting på ekspertniveau?

Der kræves ingen tidligere erfaring. Linux-kommandolinjen og Bash-scripting på ekspertniveau 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 2 af 4.

Hvor lang tid tager lektionen “Fejlhåndtering og afslutningsstatus”?

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 Linux-kommandolinjen og Bash-scripting på ekspertniveau-lektion?

Ja. Alle Linux-kommandolinjen og Bash-scripting på ekspertniveau-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 Linux-kommandolinjen og Bash-scripting på ekspertniveau