ShellCheck - Kabuk Komut Dosyalarına İlişkin Uyarı ve Önerileri Gösteren Bir Araç


ShellCheck, bash/sh kabuk komut dosyalarındaki hatalı kodlarla ilgili uyarıları ve önerileri gösteren bir statik analiz aracıdır. Birkaç şekilde kullanılabilir: web'den, kabuk komut dosyanızı https://www.shellcheck.net adresindeki çevrimiçi bir düzenleyiciye (Ace – JavaScript ile yazılmış bağımsız bir kod düzenleyici) yapıştırarak (her zaman en son git ile senkronize edilir) anında geri bildirim için ShellCheck'i denemenin en basit yoludur.

Alternatif olarak, onu makinenize yükleyebilir ve terminalden çalıştırabilir, metin düzenleyicinizin yanı sıra derleme veya test takımlarınıza entegre edebilirsiniz.

ShellCheck'in öncelikli olarak yaptığı üç şey vardır:

  • Bir kabuğun şifreli hata mesajları vermesine neden olan tipik başlangıç seviyesindeki sözdizimi sorunlarına işaret eder ve açıklar.
  • Bir kabuğun tuhaf ve sezgilere aykırı davranmasına neden olan tipik orta düzey anlambilimsel sorunlara işaret eder ve açıklar.
  • Aynı zamanda, ileri düzey bir kullanıcının normal şekilde çalışan komut dosyasının gelecekteki koşullar altında başarısız olmasına neden olabilecek ince uyarılara, önemli durumlara ve tuzaklara da dikkat çeker.

Bu makalede, Linux'taki kabuk komut dosyalarınızdaki hataları veya hatalı kodları bulmak için ShellCheck'i çeşitli şekillerde nasıl kuracağınızı ve kullanacağınızı göstereceğiz.

Linux'ta ShellCheck Nasıl Kurulur ve Kullanılır

ShellCheck gösterildiği gibi paket yöneticiniz aracılığıyla yerel olarak kolayca kurulabilir.

Debian/Ubuntu'da

apt-get install shellcheck

RHEL/CentOS'ta

yum -y install epel-release
yum install ShellCheck

Fedora'da

dnf install ShellCheck

ShellCheck kurulduktan sonra daha önce bahsettiğimiz çeşitli yöntemlerde ShellCheck’in nasıl kullanılacağına bir göz atalım.

ShellCheck'i Web'den Kullanma

https://www.shellcheck.net adresine gidin ve komut dosyanızı sağlanan Ace editörüne yapıştırın, çıktıyı aşağıdaki ekran görüntüsünde gösterildiği gibi editörün alt kısmında göreceksiniz.

Aşağıdaki örnekte test kabuğu betiği aşağıdaki satırlardan oluşur:

#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
  
#echo values of variables 
echo $MINARGS
echo $E_NONROOT
exit 0;

Yukarıdaki ekran görüntüsünden, ilk iki değişken E_NOTROOT ve E_MINARGS bildirildi ancak kullanılmadı, ShellCheck bunları "önerici hatalar" olarak rapor ediyor:

SC2034: E_NOTROOT appears unused. Verify it or export it.
SC2034: E_MINARGS appears unused. Verify it or export it. 

İkinci olarak, echo $E_NONROOT ifadesinde echo değişkeni E_NOTROOT için yanlış ad kullanıldı, ShellCheck'in hatayı göstermesinin nedeni budur:

SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is

Yine echo komutlarına baktığınızda değişkenlerin çift tırnak içine alınmadığını (küreselleştirmeyi ve sözcük bölmeyi önlemeye yardımcı olur), bu nedenle Kabuk Denetimi şu uyarıyı gösterir:

SC2086: Double quote to prevent globbing and word splitting.

ShellCheck'i Terminalden Kullanma

ShellCheck'i komut satırından da çalıştırabilirsiniz; yukarıdaki aynı kabuk komut dosyasını aşağıdaki gibi kullanacağız:

shellcheck test.sh

Metin Düzenleyicisinden ShellCheck'i Kullanma

Ayrıca ShellCheck önerilerini ve uyarılarını doğrudan çeşitli düzenleyicilerde görüntüleyebilirsiniz; bu muhtemelen ShellCheck'i kullanmanın daha etkili bir yoludur; bir dosyayı kaydettiğinizde size koddaki hataları gösterir.

Vim'de ALE veya Syntastic'i kullanın (bunu kullanacağız):

Sözdizimsel kurulumun kolay olması için Pathogen'i yükleyerek başlayın. pathogen.vim dosyasını ve ihtiyaç duyduğu dizinleri almak için aşağıdaki komutları çalıştırın:

mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Daha sonra bunu ~/.vimrc dosyanıza ekleyin:

execute pathogen#infect()

Patojeni yükledikten sonra artık ~/.vim/bundle dosyasına sözdizimini şu şekilde yerleştirebilirsiniz:

cd ~/.vim/bundle && git clone --depth=1 https://github.com/vim-syntastic/syntastic.git

Ardından vim'i kapatın ve yeniden yüklemek için yeniden başlatın, ardından aşağıdaki komutu yazın:

:Helptags

Her şey yolunda giderse, ShellCheck'in Vim ile entegre olması gerekir; aşağıdaki ekran görüntüleri, yukarıdaki aynı komut dosyasını kullanarak nasıl çalıştığını gösterir.

Yukarıdaki adımları izledikten sonra hata alırsanız muhtemelen Pathogen'i doğru şekilde yüklememişsinizdir. Adımları yineleyin ancak bu, aşağıdakileri yaptığınızdan emin olun:

  • Hem ~/.vim/autoload hem de ~/.vim/bundle dizinlerini oluşturduk.
  • Çalıştırma patojen#infect() satırı ~/.vimrc dosyanıza eklendi.
  • ~/.vim/bundle içinde sözdiziminin git klonu yapıldı.
  • Yukarıdaki dizinlerin tümüne erişmek için uygun izinleri kullanın.

Ayrıca aşağıdaki gibi kabuk komut dosyalarındaki hatalı kodu kontrol etmek için diğer düzenleyicileri de kullanabilirsiniz:

  • Emacs'te Flycheck'i kullanın.
  • Sublime'da SublimeLinter'ı kullanın.
  • Atom'da Linter'ı kullanın.
  • Diğer düzenleyicilerin çoğunda GCC hata uyumluluğunu kullanın.

Not: Daha fazla ShellChecking gerçekleştirmek için hatalı kod galerisini kullanın.

ShellCheck Github Deposu: https://github.com/koalaman/shellcheck

Bu kadar! Bu makalede, Linux'ta kabuk komut dosyalarınızdaki hataları veya hatalı kodları bulmak için ShellCheck'i nasıl kuracağınızı ve kullanacağınızı gösterdik. Aşağıdaki yorum bölümünü kullanarak düşüncelerinizi bizimle paylaşın.

Piyasada buna benzer başka araçlar biliyor musunuz? Cevabınız evet ise, yorumlarda onlar hakkındaki bilgileri de paylaşın.