Bash dobrze nadaje się do automatyzacji i spajania narzędzi w jeden prosty skrypt. Opiszę tutaj kilka przydatnych w debugowaniu wskazówek. (pozostawię nazwy angielskie, ze względu na ich popularność – nawet na Polskich stronach)
Status zakończenia (Exit status)
ls /some/src/
echo $?
Jeśli echo pokaże 0 to oznacza, że poprzednie polecenie zwróciło poprawne wykonanie. Inne sytuacje sugerują błąd.
Śledzenie poleceń (tracing)
set -o xtrace
Powyższe polecenie dodane na samej górze skryptu powoduje wyświetlanie się każdej komendy przed jej wykonaniem.
Zakończenie skryptu w przypadku błędu
set -o errexit
Wymusza natychmiastowe zakończenie skryptu jeśli wystąpił jakikolwiek błąd.
Zakończenie skryptu w przypadku błędu w potoku (pipeline)
set -o pipefail
W potoku echo $?
zwraca kod ostatniej operacji. Powyższe poleceniem wymusza zakończenie jeśli w jakimkolwiek miejscu w potoku wystąpi błąd.
Sprawdzenie deklaracji zmiennych
set -o nounset
Dodanie powyższej linijki wymusza sprawdzenie, przed uruchomieniem, czy wszystkie zmienne mają jakieś wartości.
Argument opcjonalne
A="${1:-innawartosc}"
Wartość domyślna zmiennej A to”“innawartosc”.
Podsumowanie
if [[ "${DEBUG:-FALSE}" != "FALSE" ]]; then
set -o errexit # exit if some command fails
set -o nounset # check if all variables are fill
set -o pipefail # exit if some command in pipe fails
set -o xtrace # print all executed commands
fi
Powyższe polecenia będą aktywne jeśli ustawimy zmienną DEBUG="True"
.
Źródła
- https://medium.com/expedia-group-tech/using-bash-for-devops-7046eed1aa63
- inne ciekawe źródło na temat czytania pliku linia po linii: [https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/] (https://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/)