bash – Wiki

bash

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacji , szukaj
Ujednoznacznienie Ten artykuł dotyczy powłowki systemowej UNIX. Zobacz też: bash.org.pl .
bash
Powłoka systemowa
Bash screenshot.png
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/

bashpowł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

  1. 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


Merkel spieszy na ratunek niemieckiej rewolucji energetycznej
Realizacja nowej niemieckiej strategii energetycznej to "herkulesowe zadanie" - przyznała w środę kanclerz Angela Merkel po rozmowie z premierami 16 landów Niemiec na temat kłopotów z wdrażaniem planów rezygnacji z atomu i przejścia na energię odnawialną.



Syria: Sankcje kosztowały kraj około 4 mld dolarów
Syryjski minister ds. ropy naftowej Sufian Alaw przyznał w środę, że surowe międzynarodowe sankcje wobec sektora paliwowego Syrii kosztowały kraj około 4 mld dolarów. Chodzi o zastosowane we wrześniu 2011 roku embargo na syryjską ropę naftową.



Brazylia: Pilotka wyprosiła z samolotu pasażera za seksistowskie uwagi
Pilotka brazylijskich linii lotniczych TRIP wyprosiła z samolotu przed startem pasażera. Mężczyzna głośno wypowiadał seksistowskie uwagi, kiedy dowiedział się, że samolotem pokieruje kobieta.



Premier Tusk przyleciał na szczyt UE do Brukseli
Premier Donald Tusk przybył do Brukseli na nieformalny szczyt UE, na którym przywódcy mają rozmawiać o wsparciu wzrostu i zatrudnienia. Wcześniej premier spotka się z prezydentem Francji Francois Hollande'em oraz przewodniczącym PE Martinem Schulzem.



Trzęsienie ziemi we Włoszech. Ludzie proszą o dach nad głową
Około 6 tys. mieszkańców regionu Emilia-Romania, na północy Włoch, zwróciło się po niedzielnym trzęsieniu ziemi z prośbą o zapewnienie miejsc w miasteczkach namiotowych i ośrodkach noclegowych - poinformowały miejscowe władze.



Home Page , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,