Programlama dillerinin çoğunda, hata ayıklama için hata ayıklayıcı aracı mevcuttur. Hata ayıklayıcı, bir programı veya komut dosyasını çalıştırabilen ve komut dosyasının veya programın içindekileri çalışırken incelemenizi sağlayan bir araçtır.
Bu yazıda, linux’ta bir bash kabuk betiğinde satır satır hata ayıklamayı öğreneceğiz. Kabuk betiğinde herhangi bir hata ayıklayıcı aracımız yoktur, ancak -n, -v ve -x gibi bash komut satırı seçeneklerinin yardımıyla hata ayıklamayı yapabiliriz.
Shell Komut Dosyasını Sözdizimi Hatası İçin Kontrol Etme
Bash komutunda -n seçeneğini kullanarak betiği çalıştırdığımızda betiği çalıştırmayacak, betiği okuyacak ve sözdizimini doğrulayacak ve varsa hataları bildirecektir.
Başka bir deyişle, -n seçeneği, noexec için shot (yürütme yok gibi) diyebiliriz, Shell’e komutları çalıştırmamasını söyler. Bunun yerine, kabuk yalnızca sözdizimi hatalarını kontrol eder.
Aşağıdaki içeriğe sahip bir komut dosyası oluşturalım,
$ vi debug_quotes.sh #!/bin/bash echo "USER=$USER" echo "Today's Date: $(date) echo "SHELL=$SHELL"
dosyayı kaydedip kapatın.
Şimdi betiği -n seçeneğiyle çalıştırmayı deneyin,
$ bash -n debug_quotes.sh debug_quotes.sh: line 4: unexpected EOF while looking for matching `"' debug_quotes.sh: line 5: syntax error: unexpected end of file $
Yukarıdaki çıktı, sözdizimi hatası olduğunu, çift tırnak ‘”’ eksik olduğunu gösteriyor. Bunu düzeltmek için, bugünün tarihini gösteren satırın sonuna çift tırnak işareti koyun.
Kabuk Komut Dosyasını Ayrıntılı Modda Çalıştırma
Bash komutundaki -v seçeneği, kabuk betiğine ayrıntılı modda çalışmasını söyler. Pratikte bu, kabuğun komutu çalıştırmadan önce her komutu tekrarlayacağı anlamına gelir. Bu, çoğu zaman hataları bulmaya yardımcı olabileceği için çok kullanışlıdır.
Aşağıdaki içeriğe sahip “listusers.sh” adında bir kabuk betiği yapalım,
$ vi listusers.sh #!/bin/bash cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt #Clean up the temporary file. /bin/rm -f /tmp/users.txt
Komut dosyasını -v seçeneğiyle yürütün,
$ bash -v listusers.sh
çıktı,
Yukarıdaki çıktıda, komut dosyası çıktısı, komut dosyalarının komutlarıyla karıştırılır. Ancak -v seçeneğiyle, en azından betiğinizi çalıştırırken kabuğun ne yaptığına dair daha iyi bir görüş elde edersiniz.
Komut Dosyasını -n ve -v seçeneğiyle çalıştırma
Komut satırı seçeneklerini ( -n & -v ) birleştirebiliriz. Bu, komut dosyası çıktısını görüntülerken bir komut dosyasının sözdizimini kontrol edebildiğimiz için iyi bir kombinasyon oluşturur.
Daha önce kullanılan “debug_quotes.sh” betiğini ele alalım.
$ bash -nv debug_quotes.sh #!/bin/bash echo "USER=$USER" echo "Today's Date: $(date) echo "SHELL=$SHELL" debug_quotes.sh: line 4: unexpected EOF while looking for matching `"' debug_quotes.sh: line 5: syntax error: unexpected end of file $
Kabuk Komut Dosyasında Satır Satır Hata Ayıklama
xtrace veya yürütme izlemesinin kısaltması olan -x seçeneği, kabuk değiştirme adımlarını gerçekleştirdikten sonra her komutu tekrarlamasını söyler. Böylece değişkenlerin ve komutların değerlerini görebiliriz. Çoğu zaman, bu seçenek tek başına bir sorunu teşhis etmeye yardımcı olur.
Çoğu durumda, -x seçeneği bir komut dosyası hakkında en yararlı bilgileri sağlar, ancak çok fazla çıktıya yol açabilir. Aşağıdaki örnek, bu seçeneği çalışırken göstermektedir.
$ bash -x listusers.sh + sort + grep sh + grep -v sbin + cut -d : -f1,5,7 /etc/passwd + awk -F: ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt linuxtechi linuxtechi,,, root root + /bin/rm -f /tmp/users.txt $
Gördüğümüz gibi, kabuk her komutun önüne bir + işareti eklemiştir.
ShellCheck ile Kabuk Komut Dosyasında Hata Ayıklama
Shellcheck, bash veya kabuk betiklerimiz için uyarılar ve öneriler sağlayan ücretsiz bir araçtır. Kabuk betiğimizin sözdizimi sorunlarına ve anlamsal sorunlarına işaret eder.
Shellcheck’i kullanmak için önce aşağıdaki komutu kullanarak kurun,
$ sudo apt install shellcheck // Ubuntu & Debian
RHEL / Fedora / CentOS için
$ sudo dnf install epel-release -y $ sudo dnf install ShellCheck
Yukarıdaki hata ayıklama betiğini kullanalım ve üzerinde shellcheck çalıştıralım,
$ shellcheck debug_quotes.sh
Uyarı mesajını bastırmak için aşağıda gösterildiği gibi -e parametresini kullanın,
$ shellcheck -e SC1078 debug_quotes.sh
Yukarıdaki çıktı, 3. satırda bir sözdizimi hatası olduğunu onaylar, 3. satırın sonuna çift tırnak koyarsak sözdizimi hatası giderilir.
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.