bash
| bash | |
| Powłoka systemowa | |
| Interfejs programu |
|
| Producent | Chet Ramey |
| System operacyjny | GNU |
| Aktualna wersja stabilna | 4.2 / 14 lutego 2011 [1] |
| Licencja | GNU GPL |
| www.gnu.org/software/bash/ | |
bash – powłoka systemowa UNIX napisana dla projektu GNU . Program jest rozprowadzany na licencji GPL .
Bash to jedna z najpopularniejszych powłok systemów uniksowych . Jest domyślną powłoką w większości dystrybucji systemu GNU/Linux oraz w systemie Mac OS X od wersji 10.3, istnieją także wersje dla większości systemów uniksowych. Bash jest także domyślną powłoką w środowisku Cygwin dla systemów Win32 .
Bash umożliwia pracę interaktywną i wsadową. Język basha umożliwia definiowanie aliasów, funkcji , zawiera konstrukcje sterujące przepływem (if, while, for, ...). Powłoka bash zachowuje historię wykonywanych poleceń. Jest ona domyślnie zapisywana w pliku .bash_history w katalogu domowym użytkownika.
Spis treści |
[ edytuj ] Historia
Nazwa jest akronimem od Bourne-Again Shell (angielska gra słów: fonetycznie brzmi tak samo, jak born again shell, czyli odrodzona powłoka). Wywodzi się od powłoki Bourne'a sh, która była jedną z pierwszych i najważniejszych powłok systemu UNIX oraz zawiera pomysły zawarte w powłokach Korna i csh . Bash był pisany głównie przez Briana Foksa i Cheta Rameya w 1987 .
[ edytuj ] Język powłoki bash
[ edytuj ] Najciekawsze możliwości
Język powłoki bash jest rozszerzeniem powłoki sh. Większość skryptów przeznaczonych dla powłoki sh działa bez zmian w powłoce bash, wyjątkami są skrypty, które odwołują się do wbudowanych zmiennych powłoki Bourne'a lub używają wbudowanych poleceń tej powłoki. Składnia poleceń powłoki bash zawiera idee pochodzące z powłoki Korna i csh takie jak edycja linii poleceń (ang. command-line editing), historia poleceń, stos katalogów, zmienne $RANDOM i $PPID oraz POSIX-owe podstawianie polecenia (składnia: $((...))). Gdy bash jest używany interaktywnie, dostępne jest uzupełnianie nazw plików, poleceń wbudowanych i zewnętrznych programów, zmiennych, itd., co dzieje się po naciśnięciu klawisza TAB.
[ edytuj ] Działania na liczbach całkowitych
Bash, w odróżnieniu od sh, umożliwia wykonanie obliczeń za pomocą wyrażeń w podwójnych nawiasach ((...)) oraz składni $[...]. Przykładowo:
#!/bin/bash x1=55 # Przypisz liczbę 55 do zmiennej x1. Uwaga: Nie może być spacji przed i po znaku równości! ((x1 = x1 + 1)) # Dodaj jeden do x1. Nie stawia się tutaj znaku '$'. echo $((x1 + 1)) # Wypisz wartość x1+1 na ekran. ((++x1)) # Zwiększenie o jeden w stylu języka C. ((x1++)) # Podobnie jak powyżej ale teraz post-inkrementacja. echo $[x1=x1*20] # Pomnóż x1 przez 20, zapisz wynik do x1 i wypisz wynik na ekran. echo $((x1 * 20)) # To samo co powyżej, ale nie zapisuj wyniku do zmiennej. echo $((x1<1000)) # Sprawdź czy x1 jest mniejsze od 1000. Zero oznacza fałsz.
Składnia ((...)) może być także wykorzystana w wyrażeniach warunkowych, ponieważ w wyniku wykonania zwracane jest 0 lub 1 w zależności od tego czy porównanie wartości zwraca fałsz czy prawdę.
#!/bin/bash if ((x == y * 3 + z * 2)) then echo Yes fi ((z > 23)) && echo Yes
Składnia ((...)) umożliwia posługiwanie się operatorami : '==', '!=', '>', '<', '>=' i '<='.
Bash nie umożliwia wykonywania obliczeń z wykorzystaniem liczb zmiennoprzecinkowych. Jedyne powłoki systemowe pozwalające na posługiwanie się liczbami zmiennoprzecinkowymi to powłoka Korna ( 1993 ) oraz zsh (od wersji 4.0).
[ edytuj ] Przekierowanie wejścia/wyjścia
Bash rozszerza składnię powłoki sh służącą do przekierowania wejścia/wyjścia. Możliwe jest skierowanie standardowego wejścia i standardowego wyjścia dla błędów do pliku w sposób krótszy niż w sh:
polecenie &> plik
W powłoce Bourne'a wyglądałoby to następująco 'polecenie > plik 2>&'. Od wersji 2.05b możliwe jest przekierowanie zmiennej na standardowe wejście polecenia:
#!/bin/bash polecenie <<< "Napis do przeczytania ze standardowego wejścia" #można też użyć zmiennej zmienna="Ala ma" cat <<< "${zmienna} kota."
Przykład: Przekieruj standardowe wyjście do pliku, wypisz dane, zamknij plik, zresetuj wyjście:
exec 6>&1 # niech deskryptor pliku 6 stanie się kopią standardowego wyjścia exec 1>test.dane # otwórz plik test.dane do zapisu, deskryptor nr 1 oznacza, # że trafi do niego standardowe wyjście echo "dane:dane:dane" # wypisz coś exec 1<&- # zamknij plik exec 1>&6 # przywróć deskryptorowi 1 jego pierwotną funkcję exec <&- # zamknij deskryptor 6
Otwórz i zamknij plik:
# otwórz test.dane do czytania exec 6<test.dane # czytaj kolejne wiersze i wypisuj je, aż do napotkania końca pliku while read -u 6 dane do echo "$dane" done # zamknij plik exec 6<&-
Podstaw wyjście zewnętrznego polecenia do zmiennej:
# wyszukaj pliki których nazwa kończy się na literę "h" # i zachowaj wynik w zmiennej ZM ZM=$(find . -name "*h")
[ edytuj ] Wbudowana obsługa wyrażeń regularnych
Bash 3.0 posiada wbudowaną obsługę wyrażeń regularnych, dopasowanie odbywa się za pomocą składni przypominającej Perl :
[[ napis =~ wyrażenie ]]
Używa się standardowych wyrażeń regularnych opisanych na stronie regex(7) podręcznika man . Powyższe polecenie zwraca wartość 1, gdy dopasowanie udało się lub 0 w przeciwnym przypadku. Podwyrażenia otoczone nawiasami są dostępne w zmiennej powłoki BASH_REMATCH, tak jak w poniższym przykładzie:
if [[ abcfoobarbletch =~ foo(bar)bl(.*) ]] then echo "Dopasowanie udało się\!" echo $BASH_REMATCH # wypisuje: foobarbletch echo ${BASH_REMATCH[1]} # wypisuje: bar echo ${BASH_REMATCH[2]} # wypisuje: etch fi
Używanie powyższej składni, zamiast programu grep , daje kod działający szybciej, ponieważ unika się kosztownego tworzenia nowego procesu.
[ edytuj ] Zobacz też
Przypisy
- ↑ Chet Ramey: Bash-4.2 available for FTP ( ang. ). GNU Announcement mailing list, 2011-02-14. [dostęp 2011-02-21].
[ edytuj ] Linki zewnętrzne
- w języku polskim
- w języku angielskim
|
||||||||||||||||
Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

