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.
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_nameochlog_file). AnvändUPPERCASEför miljövariabler eller globala konstanter. Användlowercase_with_underscoresför lokala skriptvariabler. - Funktioner: Använd
lowercase_with_underscores, ofta med ett verb först (till exempelprocess_dataochcheck_status). - Skript: Använd
lowercase_with_hyphens(till exempelbackup-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
doneKontroll 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 -uochset -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!
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
- Felsökning av Bash-skript (set -x, trap)
- Felhantering och avslutningsstatus
- Bästa praxis för skriptning och lintning
- Testa Bash-skript med Bats