İleri Düzey Betik Projesi
Komut satırı araçlarından ileri düzey Bash betik tekniklerine kadar öğrendiğiniz tüm kavramları birleştiren kapsamlı bir proje üzerinde çalışın.
İleri Düzey Betik Projesi, CoddyKit'te ücretsiz bir DevOps Bootcamp dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, DevOps Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. DevOps Bootcamp kursu toplamda 4 dersten oluşur.
Proje Başlangıcı: Görev
Final projemize hoş geldiniz! Bu kurs boyunca birçok güçlü Linux komutunu ve Bash betik yazma tekniğini öğrendiniz. Şimdi hepsini bir araya getirme zamanı.
Bu derste sıfırdan pratik ve gelişmiş bir Bash betiği oluşturacağız. Bu proje, öğrendiğiniz her şeyi tek bir işlevsel çözümde birleştirmenizi gerektirecek.
Proje Hedefimizi Tanımlama
Amacımız bir dosya izleme ve arşivleme betiği oluşturmaktır. Günlük dosyaları üreten bir sunucunuz olduğunu ve bunları elle müdahale etmeden düzenli olarak işlemeniz gerektiğini düşünün.
Betiğimiz şunları yapacak:
- Belirli bir dizini yeni metin dosyaları için sürekli izlemek.
- Her yeni dosyayı işlemek (örneğin satırlarını saymak).
- İşlenen dosyayı bir arşiv dizinine taşımak.
- Zaman damgaları ve tüm hatalar da dâhil olmak üzere tüm etkinlikleri günlüğe kaydetmek.
Betik Temeli: Shebang ve Değişkenler
Her iyi betik açık bir temelle başlar. Shebang tanımlayarak ve temel değişkenleri ayarlayarak başlayacağız. Bu değişkenler, betiğimizi esnek ve kolay yapılandırılabilir hâle getirecek.
İzleme dizinimiz, arşiv dizinimiz ve bir günlük dosyamız için yollar tanımlayacağız.
#!/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"Dizinlerin Var Olmasını Sağlama
Betiğimiz izleme veya arşivleme yapmadan önce gerekli dizinlerin var olduğundan emin olmamız gerekir. Burada mkdir -p kullanmak çok önemlidir; çünkü bu komut dizinleri yalnızca henüz yoksa oluşturur ve zaten varsa hata vermez.
Dizin oluşturma başarısız olursa düzgün biçimde çıkmak için temel hata yönetimi de ekleyeceğiz.
#!/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"İzleme Döngüsü
Yeni dosyaları izlemek için betiğimizin sürekli çalışması gerekir. Bunun için while true döngüsü idealdir. Döngünün içinde, denetimler arasında birkaç saniye beklemek için sleep kullanacağız; böylece betiğin çok fazla kaynak tüketmesini önleyeceğiz.
Etkinlikleri takip edebilmek için her denetimi günlüğe de kaydedeceğiz.
#!/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
doneDosyaları Bulma ve İşleme
Döngümüzün içinde yeni metin dosyalarını bulmamız gerekiyor. Bunun için find komutu, bulunan her dosyayı işlemek üzere bir for döngüsüyle birlikte idealdir. İşleme adımı olarak her dosyadaki satırları saymak için wc -l kullanacağız.
Bu, komut satırı araçlarının bir betik içinde nasıl birleştirileceğini gösterir.
#!/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İşlenen Dosyaları Arşivleme
Bir dosyayı işledikten sonra onu arşiv dizinimize taşımamız gerekir. Bunun için mv komutu kullanılır. Taşıma işleminin başarılı olduğunu doğrulamak ve oluşan hataları günlüğe kaydetmek üzere mv komutunun çıkış durumunu denetleyen bir if ifadesi de ekleyeceğiz.
Bu, betiğimizi daha dayanıklı hâle getirir.
#!/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
doneTrap ile Kontrollü Çıkış Ekleme
Uzun süre çalışan bir betiğin kontrollü biçimde durmasını sağlayacak bir yönteme ihtiyacı vardır. trap komutu, SIGINT (Ctrl+C ile tetiklenir) gibi sinyalleri yakalamamıza ve çıkmadan önce bir temizleme işlevini çalıştırmamıza olanak tanır. Böylece betiğimizin kapanışını günlüğe kaydetmesi sağlanır.
Bu, üretime hazır betikler için kritik bir adımdır.
#!/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
doneGelişmiş Betiğinizi Sınama
Betiğimiz artık tamamlandığına göre onu sınama zamanı geldi! Genellikle betiği arka planda çalıştırır (örneğin ./monitor.sh &), ardından $MONITOR_DIR içinde sınama dosyaları oluşturur ve $LOG_FILE ile $ARCHIVE_DIR öğelerini gözlemlersiniz.
İzleyiciniz için kolayca bir sınama dosyası oluşturmak üzere çalıştırabileceğiniz küçük bir betik aşağıdadır.
#!/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"Betiğin Mantığını Gözden Geçirme
Gelişmiş betiğimiz birçok kavramı bir araya getirir. Kullandığımız temel komut ve yapıları kısaca gözden geçirelim.
Proje hedefimize ulaşmada her komutun oynadığı rolü düşünün.
Ötesi: Zamanlama ve Özelleştirme
Bu betik sürekli çalışacak şekilde tasarlanmıştır. Gerçek dünyadaki bir senaryoda betiği nohup ./script.sh & kullanarak arka planda çalıştırabilir veya daha yaygın olarak cron ile belirli aralıklarla çalışacak şekilde zamanlayabilirsiniz.
Unutmayın, cron bunun gibi görevleri otomatikleştirmek için idealdir. Betiği birkaç dakikada bir çalışacak, dizini denetleyecek ve gerektiğinde dosyaları işleyecek şekilde zamanlayabilirsiniz.
Şu yönlerini özelleştirmeyi düşünün:
- Farklı dosya türlerini işlemek.
- Farklı işlemler gerçekleştirmek (örneğin dosyaları sıkıştırmak veya buluta yüklemek).
- Daha gelişmiş hata raporlaması eklemek (örneğin e-posta uyarıları).
Projenin Özeti ve Sonraki Adımlar
Tebrikler! Geniş bir Linux komutları ve betik oluşturma tekniği yelpazesini bir araya getirerek gelişmiş bir Bash betik oluşturma projesini tamamladınız.
Şunları öğrendiniz:
- Dayanıklı ve uzun süre çalışan bir betik yapılandırmayı.
- Yapılandırma için değişkenleri kullanmayı.
- Sürekli izleme için döngüler uygulamayı.
find,wcvemvgibi komutları birleştirmeyi.trapile hata işlemeyi ve kontrollü çıkışlar eklemeyi.
Bu proje, daha karmaşık otomasyon çözümleri oluşturmak için sağlam bir temel oluşturur. Denemeye ve geliştirmeye devam edin!
Sıkça Sorulan Sorular
“İleri Düzey Betik Projesi” dersi ücretsiz mi?
Evet — “İleri Düzey Betik Projesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve DevOps Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. DevOps Bootcamp kursu toplamda 4 dersten oluşur.
“İleri Düzey Betik Projesi” dersinde ne öğreneceğim?
Komut satırı araçlarından ileri düzey Bash betik tekniklerine kadar öğrendiğiniz tüm kavramları birleştiren kapsamlı bir proje üzerinde çalışın. DevOps Bootcamp ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
DevOps Bootcamp öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te DevOps Bootcamp, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“İleri Düzey Betik Projesi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu DevOps Bootcamp dersinde kod yazıp çalıştırabilir miyim?
Evet. Her DevOps Bootcamp dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Cron ile Görev Zamanlama
- Sistem Yönetimini Otomatikleştirme
- İleri Düzey Betik Projesi
- Otomatik Günlük Döndürme ve Temizleme