Linux

Linux’ta Bash Shell Komut Dosyasında Hata Ayıklama

Linuxta Bash Shell Komut Dosyasinda Hata Ayiklama2
Share

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.

Linuxta Bash Shell Komut Dosyasinda Hata Ayiklama

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ı,

Linuxta Bash Shell Komut Dosyasinda Hata Ayiklama2

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 yankılaması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.

Hepsi bu gönderiden. Bilgilendirici ve faydalı buldum. Lütfen sorularınızı ve görüşlerinizi aşağıdaki yorumlar bölümüne göndermekten çekinmeyin.