DevOps-bootcamp · Lektion

Funktioner i Bash-skript

Organisera koden med funktioner för att främja återanvändning och göra skripten renare och enklare att underhålla.

Lektion 2 av 411 steg

Funktioner i Bash-skript är en gratis lektion i DevOps-bootcamp på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för DevOps-bootcamp, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Vad är Bash-funktioner?

I Bash-skriptning är en funktion ett kodblock som utför en specifik uppgift. Se den som ett miniskript i ditt huvudskript.

Funktioner hjälper dig att:

  • Återanvända kod: Skriva en logik en gång och anropa den flera gånger.
  • Organisera skript: Dela upp komplexa uppgifter i mindre, hanterbara enheter.
  • Förbättra läsbarheten: Göra skriptet enklare att förstå och underhålla.

Definiera en enkel funktion

Det finns två vanliga sätt att definiera en funktion i Bash. Båda ger samma resultat. Den första syntaxen är vanligast.

Prova att köra det här exemplet. Det definierar funktioner, men anropar dem ännu inte!

#!/bin/bash

# Method 1: The most common way
my_first_func () {
  echo "Hello from my_first_func!"
}

# Method 2: Using the 'function' keyword
function my_second_func {
  echo "Hello from my_second_func!"
}

echo "Functions defined, but not called."

Anropa dina funktioner

Att definiera en funktion kör den inte. Om du vill köra koden i en funktion anropar du den helt enkelt med dess namn, precis som vilket annat kommando som helst.

Se hur vi anropar my_function efter att ha definierat den:

#!/bin/bash

my_function () {
  echo "This message is from inside the function."
}

echo "Script started."
my_function # Call the function here
echo "Script finished."

Lokala variabler i funktioner

Som standard är variabler som definieras i en Bash-funktion globala, vilket innebär att de kan nås och ändras var som helst i skriptet.

För att förhindra oavsiktliga sidoeffekter och hålla funktionerna avgränsade använder du nyckelordet local för att deklarera en variabel som lokal. Lokala variabler finns endast i den funktionen.

#!/bin/bash

global_message="I'm a global message"

my_function () {
  local func_message="I'm a local message"
  global_message="I've been changed by the function!"
  echo "Inside func: $func_message"
  echo "Inside func: $global_message"
}

echo "Before func: $global_message"
my_function
echo "After func: $global_message"
echo "After func: $func_message (This will be empty)"

Skicka argument till funktioner

Du kan skicka information till dina funktioner med argument, precis som med vanliga skalkommandon. Inuti funktionen nås dessa argument med särskilda variabler:

  • $1, $2, $3...: Enskilda argument
  • $#: Det totala antalet argument
  • $@: Alla argument som separata strängar
#!/bin/bash

greet_user () {
  echo "Hello, $1!"
  echo "You are $2 years old."
  echo "Total arguments received: $#"
  echo "All arguments: $@"
}

echo "Calling greet_user with two arguments:"
greet_user "Alice" 30

echo "\nCalling greet_user with one argument:"
greet_user "Bob"

Funktionens avslutningsstatus (return)

En funktion returnerar, precis som vilket kommando som helst, en avslutningsstatus. Enligt konvention betyder 0 att körningen lyckades, medan alla värden som inte är noll anger ett fel.

Du använder nyckelordet return för att ange denna avslutningsstatus. Därefter kan du kontrollera den med specialvariabeln $?, direkt efter funktionsanropet.

#!/bin/bash

check_age () {
  local age=$1
  if [ "$age" -ge 18 ]; then
    return 0 # Success: 18 or older
  else
    return 1 # Failure: under 18
  fi
}

check_age 25
echo "Exit status for 25: $?"

check_age 16
echo "Exit status for 16: $?"

if check_age 20; then
  echo "User is an adult."
else
  echo "User is a minor."
fi

Fånga funktionens utdata

Medan return skickar en avslutningsstatus ska funktionen skriva ut värdet med echo till standardutdata om du vill att den ska skapa ett ”värde” som kan lagras i en variabel.

Sedan fångar du denna utdata med kommandosubstitution genom att omge funktionsanropet med $(...).

#!/bin/bash

get_full_name () {
  local first_name=$1
  local last_name=$2
  echo "$first_name $last_name" # Echo the full name
}

name="$(get_full_name "John" "Doe")"

echo "Full name captured: $name"

calculate_area () {
  local length=$1
  local width=$2
  echo $((length * width))
}

area=$(calculate_area 10 5)
echo "Calculated area: $area"

Praktiskt exempel: En loggare

Här är ett praktiskt exempel på en återanvändbar funktion: en enkel loggare. Funktionen kan anropas var som helst i skriptet för att skriva ut meddelanden med tidsstämpel, vilket gör felsökning och uppföljning enklare.

#!/bin/bash

log_message () {
  local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
  local message="$1"
  echo "[$timestamp] $message"
}

log_message "Script execution started."
sleep 1 # Simulate some work
log_message "Processing user data..."
sleep 1
log_message "Operation completed successfully."

Bästa praxis för funktioner

Följ dessa tips för att skriva tydliga och lättunderhållna skript med funktioner:

  • Håll det enkelt: Varje funktion bör göra en sak väl.
  • Beskrivande namn: Använd tydliga namn som validate_input eller create_backup.
  • Använd local: Använd alltid local för variabler inuti funktioner för att undvika konflikter.
  • Lägg till kommentarer: Förklara vad funktionen gör, vilka argument den tar emot och vad den returnerar.
  • Validera indata: Kontrollera argumenten om funktionen förväntar sig specifika sådana.

Kontroll av funktionsargument

Testa dina kunskaper om hur argument skickas till och nås i Bash-funktioner.

Funktioner: Sammanfattning och nästa steg

Bra jobbat! Du behärskar nu Bash-funktioner.

Vi gick igenom:

  • Att definiera och anropa funktioner.
  • Att använda local för variabelomfattning.
  • Att skicka argument med $1, $#, $@.
  • Att ange avslutningsstatus med return.
  • Att fånga utdata med echo och kommandosubstitution.

Funktioner är avgörande för att skriva modulära, återanvändbara och lättunderhållna Bash-skript. Fortsätt öva för att göra dina skript kraftfullare och mer välorganiserade!

Gratis att börja

Lär dig DevOps-bootcamp 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
142
Lektioner
568

Vanliga frågor

Är lektionen ”Funktioner i Bash-skript” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen DevOps-bootcamp, inklusive ”Funktioner i Bash-skript”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Vad lär jag mig i ”Funktioner i Bash-skript”?

Organisera koden med funktioner för att främja återanvändning och göra skripten renare och enklare att underhålla. Ni övar på DevOps-bootcamp 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 DevOps-bootcamp?

Du behöver inga förkunskaper. Utbildningen i DevOps-bootcamp 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 2 av 4.

Hur lång tid tar lektionen ”Funktioner i Bash-skript”?

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 DevOps-bootcamp-lektionen?

Ja. Varje DevOps-bootcamp-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. Loopkonstruktioner (for, while)
  2. Funktioner i Bash-skript
  3. Skriptargument och alternativ ($@, $#, getopts)
  4. case-satsen och mönstermatchning
← Tillbaka till DevOps-bootcamp