Wyszukiwanie w witrynie

ShellCheck — narzędzie wyświetlające ostrzeżenia i sugestie dotyczące skryptów powłoki


ShellCheck to narzędzie do analizy statycznej, które wyświetla ostrzeżenia i sugestie dotyczące nieprawidłowego kodu w skryptach powłoki bash/sh. Można go używać na kilka sposobów: z Internetu, wklejając swój skrypt powłoki do edytora online (Ace – samodzielny edytor kodu napisany w JavaScript) w https://www.shellcheck.net (jest zawsze zsynchronizowany z najnowszą wersją git commit i jest to najprostszy sposób na wypróbowanie ShellCheck) w celu uzyskania natychmiastowej informacji zwrotnej.

Alternatywnie możesz zainstalować go na swoim komputerze i uruchomić z terminala, zintegrować go z edytorem tekstu, a także z zestawami kompilacji lub testów.

ShellCheck robi przede wszystkim trzy rzeczy:

  • Wskazuje i wyjaśnia typowe problemy ze składnią dla początkujących, które powodują, że powłoka wyświetla tajemnicze komunikaty o błędach.
  • Wskazuje i wyjaśnia typowe problemy semantyczne na poziomie pośrednim, które powodują, że powłoka zachowuje się dziwnie i sprzecznie z intuicją.
  • Wskazuje także subtelne zastrzeżenia, przypadki narożne i pułapki, które mogą spowodować, że w przyszłych okolicznościach działający skrypt zaawansowanego użytkownika nie powiedzie się.

W tym artykule pokażemy, jak zainstalować i używać ShellCheck na różne sposoby, aby znaleźć błędy lub zły kod w skryptach powłoki w systemie Linux.

Jak zainstalować i używać ShellCheck w systemie Linux

ShellCheck można łatwo zainstalować lokalnie za pomocą menedżera pakietów, jak pokazano.

Na Debianie/Ubuntu

apt-get install shellcheck

Na RHEL/CentOS

yum -y install epel-release
yum install ShellCheck

Na Fedorze

dnf install ShellCheck

Po zainstalowaniu ShellCheck przyjrzyjmy się, jak używać ShellCheck w różnych metodach, o których wspominaliśmy wcześniej.

Korzystanie z ShellCheck z Internetu

Przejdź do https://www.shellcheck.net i wklej swój skrypt w dostarczonym edytorze Ace. Dane wyjściowe zobaczysz na dole edytora, jak pokazano na zrzucie ekranu poniżej.

W poniższym przykładzie skrypt powłoki testowej składa się z następujących wierszy:

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

Na powyższym zrzucie ekranu widać, że pierwsze dwie zmienne E_NOTROOT i E_MINARGS zostały zadeklarowane, ale nie są używane, ShellCheck zgłasza je jako „sugestywne błędy”:

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

Po drugie, do echa zmiennej E_NOTROOT użyto błędnej nazwy (w instrukcji echo $E_NONROOT), dlatego ShellCheck pokazuje błąd:

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

Ponownie, gdy spojrzysz na polecenia echo, zmienne nie zostały ujęte w podwójne cudzysłowy (pomaga to zapobiegać efektom globowania i dzieleniu słów), dlatego Shell Check wyświetla ostrzeżenie:

SC2086: Double quote to prevent globbing and word splitting.

Korzystanie z ShellCheck z terminala

Możesz także uruchomić ShellCheck z wiersza poleceń, użyjemy tego samego skryptu powłoki powyżej w następujący sposób:

shellcheck test.sh

Korzystanie z ShellCheck z edytora tekstu

Możesz także przeglądać sugestie i ostrzeżenia ShellCheck bezpośrednio w różnych edytorach. Jest to prawdopodobnie bardziej efektywny sposób korzystania z ShellCheck, ponieważ po zapisaniu plików pokazuje wszelkie błędy w kodzie.

W Vimie użyj ALE lub Syntastic (my użyjemy tego):

Zacznij od zainstalowania Pathogen, aby instalacja syntastic była łatwa. Uruchom poniższe polecenia, aby pobrać plik pathogen.vim i potrzebne mu katalogi:

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

Następnie dodaj to do swojego pliku ~/.vimrc:

execute pathogen#infect()

Po zainstalowaniu patogenu możesz teraz umieścić syntastic w ~/.vim/bundle w następujący sposób:

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

Następnie zamknij vima i uruchom go ponownie, aby załadować go ponownie, a następnie wpisz poniższe polecenie:

:Helptags

Jeśli wszystko pójdzie dobrze, powinieneś zintegrować ShellCheck z Vimem. Poniższe zrzuty ekranu pokazują, jak to działa przy użyciu tego samego skryptu powyżej.

Jeśli po wykonaniu powyższych kroków pojawi się błąd, prawdopodobnie nie zainstalowałeś poprawnie Pathogen. Powtórz te kroki, ale upewnij się, że wykonałeś następujące czynności:

  • Utworzono katalogi ~/.vim/autoload i ~/.vim/bundle.
  • Dodano linię wykonywania pathogen#infect() do pliku ~/.vimrc.
  • Zrobiłem klona gita syntastic w ~/.vim/bundle.
  • Użyj odpowiednich uprawnień, aby uzyskać dostęp do wszystkich powyższych katalogów.

Możesz także użyć innych edytorów, aby sprawdzić błędny kod w skryptach powłoki, takich jak:

  • W Emacsie użyj Flycheck.
  • W Sublime użyj SublimeLinter.
  • W Atomie użyj Lintera.
  • W większości innych edytorów użyj zgodności z błędami GCC.

Uwaga: skorzystaj z galerii złego kodu, aby przeprowadzić więcej kontroli powłoki.

Repozytorium ShellCheck na Githubie: https://github.com/koalaman/shellcheck

Otóż to! W tym artykule pokazaliśmy, jak zainstalować ShellCheck i używać go do znajdowania błędów lub nieprawidłowego kodu w skryptach powłoki w systemie Linux. Podziel się z nami swoimi przemyśleniami w sekcji komentarzy poniżej.

Czy znasz jakieś inne podobne narzędzia? Jeśli tak, podziel się również informacjami na ich temat w komentarzach.