Bemästra Linux-kommandoraden och Bash-skriptning · Lektion

Bästa praxis för skriptning och lintning

Lär dig om kodkonventioner, kommentarer och verktyg som ShellCheck för att skriva rena, lättlästa och felfria Bash-skript.

Lektion 3 av 411 steg

Bästa praxis för skriptning och lintning är en gratis lektion i Bemästra Linux-kommandoraden och Bash-skriptning på CoddyKit. Detta är lektion 3 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 följa goda skriptvanor?

Det är kraftfullt att skriva Bash-skript, men utan goda vanor kan skripten bli svåra att förstå, underhålla och felsöka.

Goda metoder är riktlinjer som hjälper er att skriva ren, robust och lättläst kod. De gör era skript:

  • Lättare att läsa: För er själva och andra.
  • Lättare att underhålla: Enklare att uppdatera eller korrigera.
  • Mindre felbenägna: Vanliga misstag förebyggs.
  • Bättre för samarbete: Kodens utseende och beteende standardiseras.

Kommentera för tydlighet

Kommentarer är viktiga för att förklara varför koden gör något, inte bara vad den gör. De fungerar som anteckningar för framtida er själva eller andra utvecklare.

Använd kommentarer för att:

  • Beskriva skriptets övergripande syfte högst upp.
  • Förklara komplex logik eller svårbegripliga delar.
  • Dokumentera funktioner: deras syfte, argument och returvärden.

Inled en kommentar med symbolen # (hash).

#!/bin/bash
# This script demonstrates commenting best practices.
# Author: CoddyKit
# Date: 2023-10-27

# Function: greet_user
# Description: Prints a greeting message to the console.
# Arguments:
#   $1 - The name of the user to greet.
greet_user() {
  local name="$1" # Store the first argument in a local variable.
  echo "Hello, ${name}!" # Output the greeting message.
}

# Main script execution starts here.
echo "Script execution started."
greet_user "CoddyKit Learner" # Call the function with a specific name.
echo "Script execution finished."

Tydliga namnkonventioner

Beskrivande namn gör skriptet enklare att följa. Undvik variabler med en bokstav, såvida de inte är vanliga räknare i loopar (som i eller j).

Allmänna konventioner:

  • Variabler: Använd beskrivande namn (till exempel user_name och log_file). Använd UPPERCASE för miljövariabler eller globala konstanter. Använd lowercase_with_underscores för lokala skriptvariabler.
  • Funktioner: Använd lowercase_with_underscores, ofta med ett verb först (till exempel process_data och check_status).
  • Skript: Använd lowercase_with_hyphens (till exempel backup-script.sh).

Konsekvent formatering och indrag

Konsekvent formatering, till exempel indrag och mellanrum, förbättrar läsbarheten avsevärt. Föreställ er att läsa en bok med inkonsekventa styckeindrag!

Viktiga punkter:

  • Använd 2 eller 4 mellanslag för indrag (tabbar avråder man ofta från).
  • Håll raderna korta (under 80 tecken är en bra tumregel för terminaler).
  • Använd tomma rader för att separera logiska kodblock.
  • Rikta in relaterade element när det är lämpligt.

Konsekvens är viktigare än den specifika stil ni väljer.

Robusthet: 'set -u' (nounset)

Alternativet set -u (eller set -o nounset) är ovärderligt för att förebygga buggar som orsakas av stavfel eller variabler som råkat lämnas odefinierade. Om skriptet försöker använda en variabel som inte har tilldelats något värde avslutar set -u omedelbart skriptet med ett fel.

Det hjälper er att upptäcka fel tidigt och förebygger oväntat beteende senare i skriptet.

Prova att köra koden nedan. Den är utformad för att avslutas tidigt eftersom UNSET_NAME inte är definierad.

#!/bin/bash
# Demonstrating 'set -u' (nounset)

set -u # Exit if an unset variable is used

MY_GREETING="Hello"
echo "${MY_GREETING}, CoddyKit!"

# This variable is NOT set. With 'set -u', the script will exit here.
echo "Your name is: ${UNSET_NAME}" 

echo "This line will NOT be reached if 'set -u' is active and UNSET_NAME is indeed unset."

Robusthet: 'set -o pipefail'

När ni kopplar ihop kommandon med rör (till exempel cmd1 | cmd2 | cmd3) rapporterar Bash normalt endast avslutningsstatusen för det sista kommandot i röret. Det innebär att röret fortfarande kan rapportera att allt lyckades om cmd1 misslyckas men cmd2 och cmd3 lyckas!

set -o pipefail ändrar detta beteende. Om något kommando i ett rör misslyckas (returnerar en avslutningsstatus som inte är noll) blir hela rörets avslutningsstatus samma status som inte är noll.

Det gör era rör mer tillförlitliga genom att omedelbart signalera om ett tidigt kommando misslyckades.

#!/bin/bash
# Demonstrating 'set -o pipefail'

set -o pipefail # Ensures pipe's exit status is the last non-zero command

echo "Running a failing command in a pipe:"
echo "---"

# 'false' command always fails (exit status 1).
# 'cat /dev/null' always succeeds (exit status 0).
# With 'set -o pipefail', the pipe's overall exit status will be 1 from 'false'.
false | cat /dev/null

# This line will only be reached if the pipe above succeeds.
echo "---"
echo "Script finished successfully (this line won't show if pipe failed with set -o pipefail)."

Introduktion till ShellCheck

Även med goda metoder är det lätt att missa små syntaxfel eller vanliga fallgropar. Det är där ShellCheck kommer in!

ShellCheck är ett verktyg för statisk analys (en ”linter”) av skalskript. Det läser skriptet och påpekar:

  • Syntaxfel.
  • Vanliga nybörjarmisstag.
  • Svårupptäckta semantiska problem.
  • Portabilitetsproblem mellan olika skal.

Det ger användbara förslag, ofta med länkar till mer detaljerade förklaringar.

ShellCheck i praktiken: dåligt skript

Låt oss titta på ett skript med några vanliga problem. De kanske inte får skriptet att krascha direkt, men de är dåliga metoder eller potentiella buggar.

Föreställ er att ni har sparat det här skriptet som bad_script.sh. För att köra ShellCheck på det skriver ni: shellcheck bad_script.sh

Se om ni kan upptäcka problemen innan ni kör ShellCheck!

#!/bin/bash
# A script with some common issues

MY_NAME=coddykit # Variable assignment needs no space, but quoting is good for values
echo "Hello $MY_NAME!" # Missing quotes around variable expansion

if [ $1 = "admin" ]; then # Missing quotes around $1
  echo "Welcome, administrator."
fi

# A simple loop with potential issues
for file in *.txt; do # Unquoted glob could expand to multiple arguments
  echo File: $file # Missing quotes around $file
done

Åtgärda ShellCheck-varningar

ShellCheck skulle ge utdata som: SC2086: Double quotes missing around "$MY_NAME". Ofta anges en specifik kod (till exempel SC2086) som du kan slå upp för mer information.

Här är det föregående skriptet, korrigerat enligt ShellChecks rekommendationer och allmänna bästa praxis:

Observera användningen av dubbla citationstecken "" runt variabelexpansioner och kommandosubstitutioner för att förhindra orddelning och globbning, som är vanliga orsaker till buggar.

#!/bin/bash
# A script with issues fixed by ShellCheck

MY_NAME="CoddyKit" # Quote variable assignment values
echo "Hello ${MY_NAME}!" # Always quote variable expansions

if [ "$1" = "admin" ]; then # Quote positional parameters like $1
  echo "Welcome, administrator."
fi

# A simple loop with corrected quoting
for file in *.txt; do 
  echo "File: ${file}" # Quote variable expansions, especially in loops
done

Kontroll av bästa praxis

Vilka av följande anses vara god praxis när man skriver Bash-skript?

Sammanfattning: Professionellt skriptande

Grattis! Du har lärt dig att lyfta dina Bash-skript från fungerande till professionella.

Vi gick igenom:

  • Vikten av bästa praxis för läsbarhet och underhållbarhet.
  • Att använda kommentarer och namnkonventioner för tydlighet.
  • Att göra skript robusta med set -u och set -o pipefail.
  • Fördelarna med ShellCheck för att automatiskt hitta problem och förbättra koden.

Genom att tillämpa dessa principer skriver du mer tillförlitliga, begripliga och samarbetsvänliga Bash-skript. Fortsätt öva!

Gratis att börja

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 ”Bästa praxis för skriptning och lintning” gratis?

Ja – hela texten till ”Bästa praxis för skriptning och lintning” 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 ”Bästa praxis för skriptning och lintning”?

Lär dig om kodkonventioner, kommentarer och verktyg som ShellCheck för att skriva rena, lättlästa och felfria Bash-skript. 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 3 av 4.

Hur lång tid tar lektionen ”Bästa praxis för skriptning och lintning”?

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

  1. Felsökning av Bash-skript (set -x, trap)
  2. Felhantering och avslutningsstatus
  3. Bästa praxis för skriptning och lintning
  4. Testa Bash-skript med Bats
← Tillbaka till Bemästra Linux-kommandoraden och Bash-skriptning