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

Projekt: avancerad skriptning

Arbeta med ett omfattande projekt som integrerar alla inlärda koncept, från kommandoradsverktyg till avancerade Bash-tekniker.

Lektion 3 av 412 steg

Projekt: avancerad skriptning ä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.

Projektstart: Utmaningen

Välkommen till vårt slutprojekt! Under kursens gång har du lärt dig många kraftfulla Linux-kommandon och tekniker för Bash-skript. Nu är det dags att föra samman allt.

I den här lektionen bygger vi ett praktiskt och avancerat Bash-skript från grunden. Projektet utmanar dig att integrera allt du har lärt dig i en enda fungerande lösning.

Definiera projektets mål

Vårt mål är att skapa ett skript för filövervakning och arkivering. Föreställ dig att du har en server som genererar loggfiler och att du behöver bearbeta dem regelbundet utan manuella åtgärder.

Det här ska skriptet göra:

  • Kontinuerligt övervaka en specifik katalog efter nya textfiler.
  • Bearbeta varje ny fil (till exempel räkna antalet rader).
  • Flytta den bearbetade filen till en arkivkatalog.
  • Logga all aktivitet, inklusive tidsstämplar och eventuella fel.

Skriptets grund: Shebang och variabler

Alla bra skript börjar med en tydlig grund. Vi börjar med att definiera vår shebang och konfigurera viktiga variabler. Dessa variabler gör skriptet flexibelt och enkelt att konfigurera.

Vi definierar sökvägar till övervakningskatalogen, arkivkatalogen och en loggfil.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

Säkerställ att katalogerna finns

Innan skriptet kan övervaka eller arkivera måste vi säkerställa att de nödvändiga katalogerna finns. Att använda mkdir -p är viktigt här, eftersom kommandot bara skapar katalogerna om de inte redan finns och inte ger något fel om de redan finns.

Vi lägger också till grundläggande felhantering så att skriptet avslutas på ett ordnat sätt om skapandet av katalogerna misslyckas.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

Övervakningsloopen

Skriptet måste köras kontinuerligt för att övervaka nya filer. En while true-loop passar perfekt för detta. Inuti loopen använder vi sleep för att pausa några sekunder mellan kontrollerna, så att skriptet inte förbrukar för mycket resurser.

Vi loggar också varje kontroll för att hålla reda på aktiviteten.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  # File processing will go here
  sleep 5 # Check every 5 seconds
done

Hitta och bearbeta filer

Inuti vår loop behöver vi hitta nya textfiler. Kommandot find passar perfekt för detta, tillsammans med en for-loop som bearbetar varje fil som hittas. Vi använder wc -l för att räkna antalet rader i varje fil som vårt bearbetningssteg.

Detta visar hur kommandoradsverktyg kan kombineras i ett skript.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  # Find new .txt files and process them
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then # Double-check if it's a regular file
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      # Archiving will go here
    fi
  done
  sleep 5 # Check every 5 seconds
done

Arkivera bearbetade filer

När en fil har bearbetats behöver vi flytta den till vår arkivkatalog. Kommandot mv används för detta. Vi lägger också till en if-sats för att kontrollera slutstatusen för mv, så att vi säkerställer att flytten lyckades och loggar eventuella fel.

Detta gör skriptet mer robust.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      
      mv "$file" "$ARCHIVE_DIR/"
      if [ $? -eq 0 ]; then
        echo "$(date): Moved '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      else
        echo "$(date): ERROR: Failed to move '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      fi
    fi
  done
  sleep 5
done

Lägg till ett kontrollerat avslut med trap

Ett långkörande skript behöver kunna avslutas på ett kontrollerat sätt. Med kommandot trap kan vi fånga signaler, till exempel SIGINT (som utlöses av Ctrl+C), och köra en rensningsfunktion innan skriptet avslutas. På så sätt loggar skriptet sin nedstängning.

Detta är ett viktigt steg för skript som är redo för produktion.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# --- Functions ---
cleanup() {
  echo "$(date): Script received stop signal. Exiting gracefully." >> "$LOG_FILE"
  exit 0 # Exit with success status
}

# --- Trap Signals ---
# Trap SIGINT (Ctrl+C) and call the cleanup function
trap cleanup SIGINT

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      
      mv "$file" "$ARCHIVE_DIR/"
      if [ $? -eq 0 ]; then
        echo "$(date): Moved '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      else
        echo "$(date): ERROR: Failed to move '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      fi
    fi
  done
  sleep 5
done

Testa ert avancerade skript

Nu när skriptet är färdigt är det dags att testa det! Vanligtvis kör ni det i bakgrunden (t.ex. ./monitor.sh &), skapar sedan testfiler i $MONITOR_DIR och observerar $LOG_FILE och $ARCHIVE_DIR.

Här är ett litet skript som ni kan köra för att enkelt skapa en testfil för er övervakare.

#!/bin/bash
# create_test_file.sh

MONITOR_DIR="/tmp/coddykit_monitor"
mkdir -p "$MONITOR_DIR" # Ensure dir exists for this test script

# Create a unique test file
TEST_FILE="$MONITOR_DIR/test_log_$(date +%Y%m%d_%H%M%S).txt"
echo "This is a test entry." > "$TEST_FILE"
echo "Another line for testing." >> "$TEST_FILE"
echo "Created new test file: $TEST_FILE"

Genomgång av skriptlogiken

Vårt avancerade skript kombinerar många koncept. Låt oss snabbt gå igenom några av kärnkommandona och strukturerna vi använde.

Fundera på vilken roll varje kommando spelar för att uppnå projektets mål.

Vidare: schemaläggning och anpassning

Det här skriptet är utformat för att köras kontinuerligt. I ett verkligt scenario kan ni köra det i bakgrunden med nohup ./script.sh & eller, vanligare, schemalägga det så att det körs med jämna mellanrum via Cron.

Kom ihåg att Cron passar perfekt för att automatisera uppgifter som denna. Ni kan schemalägga det så att det körs varannan minut, kontrollerar katalogen och bearbetar filer efter behov.

Överväg att anpassa det så att det:

  • bearbetar andra filtyper.
  • utför andra åtgärder (t.ex. komprimerar filer eller laddar upp dem till molnet).
  • lägger till mer avancerad felrapportering (t.ex. e-postaviseringar).

Projektöversikt och nästa steg

Grattis! Ni har precis slutfört ett avancerat Bash-skriptprojekt som integrerar många olika Linux-kommandon och skripttekniker.

Ni har lärt er att:

  • strukturera ett robust, långkörande skript.
  • använda variabler för konfiguration.
  • implementera loopar för kontinuerlig övervakning.
  • kombinera kommandon som find, wc och mv.
  • lägga till felhantering och kontrollerade avslut med trap.

Det här projektet är en stabil grund för att bygga mer komplexa lösningar för automatisering. Fortsätt att experimentera och bygga!

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 ”Projekt: avancerad skriptning” gratis?

Ja – hela texten till ”Projekt: avancerad skriptning” 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 ”Projekt: avancerad skriptning”?

Arbeta med ett omfattande projekt som integrerar alla inlärda koncept, från kommandoradsverktyg till avancerade Bash-tekniker. 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 ”Projekt: avancerad skriptning”?

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. Schemalägg uppgifter med Cron
  2. Automatisera systemadministration
  3. Projekt: avancerad skriptning
  4. Automatisk loggrotering och rensning
← Tillbaka till Bemästra Linux-kommandoraden och Bash-skriptning