Historia

Pochodzenie nazwy bash

Nazwa Bash jest skrótem od Bourne-Again Shell i nawiązuje do nazwiska autora oryginalnej powłoki uniksowej Sh, Steva Bourne’a. Nazwę Bash można odczytywać jako Ponownie narodzony SH (Bourne brzmi bardzo podobnie jak born), co jednoznacznie wskazuje pochodzenie nazwy Bash.

Autorzy

Powłoka Bourne’a Sh została stworzona około roku 1977 przez Briana Foxa, pracownika Free Software Foundation. Projekt bash najsilniej był rozwijany w drugiej połowie lat osiemdziesiatych. W roku 1990 jej głównym opiekunem został Chet Ramey.

Popularność

Bash jest najpopularniejszą powłoką znajduje się on niemal w każdej dystrybucji systemu GNU/Linux oraz w systemie Mac OS X. Istnieją także wersje dla większości systemów Unixowych (np *BSD). Bash jest także domyślną powłoką w środowisku Cygwin dla systemów Win32.

Licencja i kod źródłowy

Program jest rozprowadzany na licencji GNU GPL. Repozytorium kodu źródłowego Bash dostępne jest w git.savannah.gnu.org (mirror na github).

Tłumaczenia

Niektóre polecenia i komunikaty wypisywane przez basha sa w języku polskim.

Podobieństwa do …

Jak już powiedziano, Bash jest powłoką opartą o Sh, więc obie posiadają bardzo wiele wspólnych cech (ale nie są to te same powłoki), orócz nich zawiera również szereg niezwykle pożytecznych rozszerzeń zapożyczonych z powłoki Korna (ksh), autorstwa Davida Korna i powłoki C (Csh), autorstwa Billego Joy’a. Free Software Foundation zaprojektowało Basha w taki sposób, by był zgodny ze specyfikacją IEEE POSIX Shell and Utilities, opracowywaną przez Grupę Roboczą [google:1003.2+IEEE].

  • Sh

    Większość funkcji Bash dziedziczy po powłoce Bourne’a - Sh. Bash tak samo obsługuje przekierowania strumieni we/wy, czy rozszerzanie zmiennych i parametrów (ang. expansion). Posiada wszystkie funkcje sterujące i warunkowe takie jak for, while, czy if i pozostałe występujące w Sh.

    Gramatyka Basha jest pełną implementacją gramatyki Sh włącznie z funkcjami powłoki function.

    Standardowe zmienne określające zachowanie powłoki, takie jak PS1, IFS czy PATH również istnieją w Bashu. W Bashu można znaleźć szereg funkcji będących rozszerzeniem możliwości Sh, które w Sh nie występują.

    Przykładem może być polecenie wbudowane command czy rozbudowane polecenie test. W Bashu zaimplementowano nowe polecenie $(...) będące odpowiednikiem konstrukcji . Poza tym są również możliwości definiowania lokalnych zmiennych w funkcjach powłoki, wyłączania, włączania i podstawiania nowych wersji poleceń wbudowanych.

  • Ksh

    Bash ma również zmienne RANDOM i REPLY. Pierwsza z nich zwraca liczbę pseudo losową gdy się wyświetli jej wartość, lub inicjalizuje generator gdy się jej przypisze nową wartość. Zmienna REPLY jest domyślną zmienną przechowującą wartość zwracaną przez polecenie read. Wbudowane polecenie typeset pozwala na nadawanie atrybutów zmiennym powłoki. Przykładowo można nadawać atrybut ,,tylko do odczytu»» (readonly).

    Z powłoki Korna został także przejęty mechanizm operacji arytmetycznych (ang. arithmetic evaluation). Zmienne powłoki mogą być używane jako operandy operatorów arytmetycznych, oraz przechowywać wyniki operacji. Zaimplementowano prawie wszystkie operatory arytmetyczne występujące w języku ANSI C, wraz z kolejnością wykonywania działań.

    Innym rozszerzeniem wziętym z ksh jest rozbudowany mechanizm aliasów. Pozwalają one nadawać poleceniom nowe nazwy, np. alias del=rm, co spowoduje, że polecenie del bedzie tożsame z wykonaniem polecenia rm. W aliasach można także zdefiniować domyślne parametry wywołania komendy, np. alias ls="/bin/ls -lF".

  • Csh

    Powłoka C jest źródłem mechanizmu historii linii poleceń powłoki dostępnego przez polecenie: ! polecenie.

    Z tej powłoki przeniesiono również mechanizm rozszerzania zawartości nawiasów klamrowych (ang. brace expansion), mechanizm podstawiania katalogu domowego użytkowników przy pomocy tyldy (~ = $HOME), a także polecenia pushd, popd i dirs

Przykład użycia brace expansion jest pokazany poniżej:

$ mkdir /tmp/new-{alfa,beta,gamma}-dir
$ ls /tmp
new-alfa-dir
new-beta-dir
new-gamma-dir
$ echo ba-{b,c,d}-sh
ba-b-sh ba-c-sh ba-d-sh

Jak korzystać z Basha?

Jeśli uzywamy systemu z rodziny Linux to Bash najprawdopodobniej już nie tylko jest zainstalowany, ale z niego już korzystamy, więc warto nauczyć się wykorzystywać jego pełny potencjał. Dzięki temu korzystanie z systemu będzie przyjemniejsze i bardziej produktywne. Dlaczego jednak uczyć się programowania w bashu? To proste - już myślimy w kategoriach wykonywania komend, kopiowania plików, tworzenia strumieni i przekierowań. Warto jest uczyć się języka, który umożliwia wykorzystanie znanych nam już potężnych i pozwalających na oszczędzenie czasu narzędzi. Bash wysokopoziomowym pośrednikiem pomiędzy nami i komputerem.

Bash nalezy do języków skryptowych, w których pisze się skrypty, czyli proste programy pozwalające zautomatyzować lub uprościć jakąś czynność powtarzalną bądź nie.

Czynności jakie Bash pozwala uprościć to:

  • kompilacja, budowanie aplikacji,
  • przetwarzanie plików (tworzenie, usuwanie, szukanie, itp.),
  • prosta obróbka (np. tekstowa) plików,
  • administracja systemem (np. konfiguracja, uruchamianie demonów),
  • i wiele innych…

Bash jest językiem interpretowanym. Skryptów napisanych w Bashu się nie kompiluje. Nie ma skomplikowanych struktur danych (jak tablice wielowymiarowe, czy drzewa), ani konstrukcji znanych z języków wyższych poziomów (jak rekordy, klasy).

W związku z tym skrypty musza być proste, język ten NIE nadaje się do:

  • zadań trudnych obliczeniowo, wymagających szybkiego działania,
  • operacji skomplikowanych algorytmicznie lub matematycznie,
  • operacji niskopoziomowych, jak dostęp do sprzętu.

Dokumentacja

Dokumentacja nie jest mocną stroną tego języka programowania, niestety w systemie nie ma dobrego przewodnika do nauki Basha. Istnieje co prawda strona podręcznika systemowego (man bash), ale nie jest ona zbyt przyjazna dla osób nie mających wcześniej z Bashem kontaktu - dla osób nie znających powłoki jest ona niemal bezużyteczna. Jest także oficjalna dokumentacja basha na stronach gnu, ale mi ona nie przypadła do gustu głównie ze względu na zbyt małą liczbę przykładów.

Główną siłą Basha jest łączenie komend wykonywanych w systemie, które trzeba znać i umieć ich uzyć. Jeśli chodzi o uzyskiwanie informacji na temat opcji danej komendy, to z pomocą przychodzą nam polecenia:

  • apropos
  • man
  • info

Podsumowanie

Warto wspomnieć, że choć Bash był zaprojektowany z myślą o uniksopodobnym systemie GNU, to w tej chwili podobnie jak całe oprogramowanie GNU, działa na praktycznie każdej platformie uniksowej, Linuksie a nawet w środowiskach DOS, Windows i OS/2.