Projekt: avancerad skriptning
Arbeta med ett omfattande projekt som integrerar alla inlärda koncept, från kommandoradsverktyg till avancerade Bash-tekniker.
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
doneHitta 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
doneArkivera 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
doneLä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
doneTesta 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,wcochmv. - 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!
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
- Schemalägg uppgifter med Cron
- Automatisera systemadministration
- Projekt: avancerad skriptning
- Automatisk loggrotering och rensning