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

Avanceret scripting-projekt

Gennemfør et omfattende projekt, der integrerer alle de lærte begreber fra kommandolinjeværktøjer til avancerede Bash-scriptingteknikker.

Lektion 3 af 412 trin

Avanceret scripting-projekt er en gratis Linux-kommandolinjen og Bash-scripting på ekspertniveau-lektion på CoddyKit. Dette er lektion 3 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.

Projektstart: Udfordringen

Velkommen til vores afsluttende projekt! I løbet af dette kursus har du lært mange effektive Linux-kommandoer og Bash-scriptingteknikker. Nu er det tid til at samle det hele.

I denne lektion bygger vi et praktisk, avanceret Bash-script fra bunden. Projektet udfordrer dig til at integrere alt det, du har lært, i én funktionel løsning.

Definér projektets mål

Vores mål er at oprette et script til filovervågning og arkivering. Forestil dig, at du har en server, der genererer logfiler, og at du regelmæssigt skal behandle dem uden manuel indgriben.

Vores script skal:

  • Kontinuerligt overvåge en bestemt mappe for nye tekstfiler.
  • Behandle hver ny fil (f.eks. tælle dens linjer).
  • Flytte den behandlede fil til en arkivmappe.
  • Logge alle aktiviteter, herunder tidsstempler og eventuelle fejl.

Scriptets grundlag: Shebang og variabler

Ethvert godt script begynder med et tydeligt grundlag. Vi starter med at definere vores shebang og opsætte vigtige variabler. Disse variabler gør scriptet fleksibelt og nemt at konfigurere.

Vi definerer stier til vores overvågningsmappe, arkivmappe og en logfil.

#!/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ørg for, at mapperne findes

Før scriptet kan overvåge eller arkivere, skal vi sikre, at de nødvendige mapper findes. Det er vigtigt at bruge mkdir -p her, fordi kommandoen kun opretter mapper, hvis de ikke allerede findes, og ikke giver en fejl, hvis de gør.

Vi tilføjer også grundlæggende fejlhåndtering, så scriptet afsluttes korrekt, hvis oprettelsen af mapperne mislykkes.

#!/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"

Overvågningsløkken

Vores script skal køre kontinuerligt for at overvåge nye filer. En while true-løkke er perfekt til dette. Inde i løkken bruger vi sleep til at holde pause i nogle sekunder mellem kontrollerne, så scriptet ikke bruger for mange ressourcer.

Vi logger også hver kontrol for at holde styr 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

Finde og behandle filer

Inde i vores løkke skal vi finde nye tekstfiler. Kommandoen find er ideel til dette, kombineret med en for-løkke, der behandler hver fil, som bliver fundet. Vi bruger wc -l til at tælle linjerne i hver fil som vores behandlingstrin.

Dette demonstrerer, hvordan kommandolinjeværktøjer kombineres i et script.

#!/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

Arkivering af behandlede filer

Efter at have behandlet en fil skal vi flytte den til vores arkivmappe. Kommandoen mv bruges til dette. Vi tilføjer også en if-sætning, der kontrollerer afslutningsstatussen for mv, så vi sikrer, at flytningen lykkedes, og logger eventuelle fejl.

Dette gør vores script mere 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

Tilføj en kontrolleret afslutning med Trap

Et script, der kører længe, skal kunne stoppes på en kontrolleret måde. Kommandoen trap gør det muligt at opfange signaler som SIGINT (udløst af Ctrl+C) og køre en oprydningsfunktion, før scriptet afsluttes. Det sikrer, at vores script logger sin afslutning.

Dette er et afgørende trin for scripts, der er klar til 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

Test dit avancerede script

Nu hvor vores script er færdigt, er det tid til at teste det! Du vil typisk køre det i baggrunden (f.eks. ./monitor.sh &), derefter oprette testfiler i $MONITOR_DIR og holde øje med $LOG_FILE og $ARCHIVE_DIR.

Her er et lille script, som du kan køre for nemt at oprette en testfil til din monitor.

#!/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"

Gennemgang af scriptets logik

Vores avancerede script kombinerer mange begreber. Lad os hurtigt gennemgå nogle af de centrale kommandoer og strukturer, vi brugte.

Tænk over, hvilken rolle hver kommando spiller for at nå vores projektmål.

Videre: Planlægning og tilpasning

Dette script er designet til at køre kontinuerligt. I en virkelig situation kan du køre det i baggrunden med nohup ./script.sh & eller, mere almindeligt, planlægge det til at køre med jævne mellemrum ved hjælp af Cron.

Husk, at Cron er perfekt til at automatisere opgaver som denne. Du kan planlægge det til at køre hvert par minutter, kontrollere mappen og behandle filer efter behov.

Overvej at tilpasse det til at:

  • Behandle andre filtyper.
  • Udføre andre handlinger (f.eks. komprimere filer eller uploade til skyen).
  • Tilføje mere avanceret fejlrapportering (f.eks. e-mailnotifikationer).

Opsummering af projektet og næste trin

Tillykke! Du har netop gennemført et avanceret Bash-scriptprojekt, der integrerer en lang række Linux-kommandoer og scriptteknikker.

Du har lært at:

  • Strukturere et robust script, der kører længe.
  • Bruge variabler til konfiguration.
  • Implementere løkker til kontinuerlig overvågning.
  • Kombinere kommandoer som find, wc og mv.
  • Tilføje fejlhåndtering og kontrollerede afslutninger med trap.

Dette projekt er et solidt fundament for at bygge mere komplekse automatiseringsløsninger. Bliv ved med at eksperimentere og bygge videre!

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 “Avanceret scripting-projekt” gratis?

Ja — hele teksten til “Avanceret scripting-projekt” 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 “Avanceret scripting-projekt”?

Gennemfør et omfattende projekt, der integrerer alle de lærte begreber fra kommandolinjeværktøjer til avancerede Bash-scriptingteknikker. 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 3 af 4.

Hvor lang tid tager lektionen “Avanceret scripting-projekt”?

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. Planlægning af opgaver med Cron
  2. Automatisering af systemadministration
  3. Avanceret scripting-projekt
  4. Automatisk logrotation og oprydning
← Tilbage til Linux-kommandolinjen og Bash-scripting på ekspertniveau