Geavanceerd scriptingproject
Werk aan een uitgebreid project waarin u alle geleerde concepten toepast, van opdrachtregelhulpmiddelen tot geavanceerde Bash-scriptingtechnieken.
Geavanceerd scriptingproject is een gratis DevOps-bootcamp-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject DevOps-bootcamp. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus DevOps-bootcamp bevat in totaal 4 lessen.
Projectstart: de uitdaging
Welkom bij ons eindproject! Tijdens deze cursus heb je veel krachtige Linux-opdrachten en Bash-scriptingtechnieken geleerd. Nu is het tijd om ze allemaal samen te brengen.
In deze les bouwen we vanaf nul een praktisch, geavanceerd Bash-script. Dit project daagt je uit om alles wat je hebt geleerd te integreren in één functionele oplossing.
Het doel van ons project bepalen
Ons doel is een script voor bestandsbewaking en archivering te maken. Stel je voor dat je een server hebt die logbestanden genereert en dat je deze regelmatig moet verwerken zonder handmatige tussenkomst.
Dit gaat ons script doen:
- Continu een specifieke map controleren op nieuwe tekstbestanden.
- Elk nieuw bestand verwerken, bijvoorbeeld door het aantal regels te tellen.
- Het verwerkte bestand naar een archiefmap verplaatsen.
- Alle activiteiten loggen, inclusief tijdstempels en eventuele fouten.
Scriptbasis: shebang en variabelen
Elk goed script begint met een duidelijke basis. We beginnen met het definiëren van onze shebang en het instellen van belangrijke variabelen. Deze variabelen maken ons script flexibel en eenvoudig te configureren.
We definiëren paden voor onze bewakingsmap, archiefmap en een logbestand.
#!/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"Controleren of mappen bestaan
Voordat ons script kan bewaken of archiveren, moeten we ervoor zorgen dat de benodigde mappen bestaan. Het gebruik van mkdir -p is hierbij essentieel: hiermee worden mappen alleen gemaakt als ze nog niet bestaan en ontstaat er geen fout als ze al wel bestaan.
We voegen ook een eenvoudige foutafhandeling toe, zodat het script netjes stopt als het maken van een map mislukt.
#!/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"De bewakingslus
Ons script moet continu blijven draaien om nieuwe bestanden te bewaken. Een while true-lus is hiervoor perfect. Binnen de lus gebruiken we sleep om tussen controles enkele seconden te wachten. Zo voorkomt het script dat het te veel bronnen gebruikt.
We loggen ook elke controle om de activiteit bij te houden.
#!/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
doneBestanden vinden en verwerken
In onze lus moeten we nieuwe tekstbestanden vinden. De opdracht find is hiervoor ideaal, gecombineerd met een for-lus om elk gevonden bestand te verwerken. We gebruiken wc -l om het aantal regels in elk bestand te tellen als verwerkingsstap.
Dit laat zien hoe je opdrachtregelprogramma's in een script combineert.
#!/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
doneVerwerkte bestanden archiveren
Na het verwerken van een bestand moeten we het naar onze archiefmap verplaatsen. Hiervoor gebruiken we de opdracht mv. We voegen ook een if-instructie toe om de afsluitstatus van mv te controleren. Zo weten we zeker dat het verplaatsen is gelukt en kunnen we eventuele fouten loggen.
Hierdoor wordt ons script robuuster.
#!/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
doneGecontroleerd afsluiten met Trap
Een langlopend script heeft een manier nodig om gecontroleerd te stoppen. Met de opdracht trap kunnen we signalen opvangen, zoals SIGINT (geactiveerd door Ctrl+C), en vóór het afsluiten een opruimfunctie uitvoeren. Zo zorgt ons script ervoor dat het afsluiten wordt gelogd.
Dit is een essentiële stap voor scripts die klaar zijn voor productie.
#!/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
doneJe geavanceerde script testen
Nu ons script af is, is het tijd om het te testen! Je zou het doorgaans op de achtergrond uitvoeren (bijvoorbeeld ./monitor.sh &), vervolgens testbestanden maken in $MONITOR_DIR en $LOG_FILE en $ARCHIVE_DIR bekijken.
Hier is een klein script waarmee je eenvoudig een testbestand voor je monitor kunt maken.
#!/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"De scriptlogica doornemen
Ons geavanceerde script combineert veel concepten. Laten we enkele van de belangrijkste opdrachten en structuren die we hebben gebruikt kort doornemen.
Denk na over de rol die elke opdracht speelt bij het bereiken van ons projectdoel.
Verder: plannen en aanpassen
Dit script is ontworpen om voortdurend te draaien. In een praktijksituatie zou je het op de achtergrond kunnen uitvoeren met nohup ./script.sh & of, wat gebruikelijker is, het periodiek laten uitvoeren met Cron.
Onthoud dat Cron ideaal is voor het automatiseren van taken als deze. Je kunt het bijvoorbeeld elke paar minuten laten draaien om de map te controleren en bestanden waar nodig te verwerken.
Overweeg om het aan te passen voor:
- Het verwerken van andere bestandstypen.
- Het uitvoeren van andere acties (bijvoorbeeld bestanden comprimeren of uploaden naar de cloud).
- Het toevoegen van geavanceerdere foutmeldingen (bijvoorbeeld e-mailwaarschuwingen).
Samenvatting van het project en volgende stappen
Gefeliciteerd! Je hebt zojuist een geavanceerd Bash-scriptproject afgerond waarin je een breed scala aan Linux-opdrachten en scriptechnieken hebt geïntegreerd.
Je hebt geleerd om:
- Een robuust, langlopend script te structureren.
- Variabelen te gebruiken voor configuratie.
- Lussen te implementeren voor voortdurende bewaking.
- Opdrachten zoals
find,wcenmvte combineren. - Foutafhandeling en gecontroleerd afsluiten met
traptoe te voegen.
Dit project vormt een stevige basis voor het bouwen van complexere automatiseringsoplossingen. Blijf experimenteren en bouwen!
Leer DevOps-bootcamp met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 142
- Lessen
- 568
Veelgestelde vragen
Is de les “Geavanceerd scriptingproject” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad DevOps-bootcamp, waaronder “Geavanceerd scriptingproject”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus DevOps-bootcamp bevat in totaal 4 lessen.
Wat leer ik in “Geavanceerd scriptingproject”?
Werk aan een uitgebreid project waarin u alle geleerde concepten toepast, van opdrachtregelhulpmiddelen tot geavanceerde Bash-scriptingtechnieken. Je oefent met DevOps-bootcamp door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met DevOps-bootcamp te beginnen?
Ervaring vooraf is niet nodig. DevOps-bootcamp op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Geavanceerd scriptingproject”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over DevOps-bootcamp?
Ja. Elke les over DevOps-bootcamp bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Taken plannen met Cron
- Systeembeheer automatiseren
- Geavanceerd scriptingproject
- Geautomatiseerde logrotatie en opschoning