Skip to content
Na tej stronie

W skrócie: powłoka i skrypty Bash

Bash jest najpopularniejszą z dostępnych powłok wiersza poleceń dostarczonych wraz ze środowiskiem GNU/Linux.

Bash nie tylko pozwala uruchamiać programy w wierszu poleceń, ale również jest językiem skryptowania, umożliwiającym automatyzację skomplikowanych czynności.

Tworzenie i wywoływanie skryptów bash

Plik będący skryptem bash jest zapisem poleceń, które mają wykonać się w czasie wywołania skryptu w powłoce.

Uruchamiamy dany skrypt bash poprzez uruchomienie powłoki wraz ze ścieżką do skryptu.

Skrypt może zawierać nagłówek #!/bin/bash, który informuje system Linux, że dany plik należy wywołać programem /bin/bash.

Polecenie, którym został wywołany skrypt, można odczytać ze zmiennych specjalnych. Lista argumentów jest dostępna wewnątrz skryptu jako zmienne $1, $2, $3, ...

ZmiennaOpis
$*Całe polecenie jako tekst oddzielony spacją między argumentami
"$@"Wszystkie argumenty polecenia, uwzględniając podział argumentów
$#Liczba argumentów polecenia

Polecenie w powyższej tabelce referuje do polecenia, którym został wywołany skrypt albo funkcja.

Uwaga

Składnia "$@" jest różna od $@. Należy używać wariantu z cudzysłowem, aby uwzględnić rozdzielenie argumentów.

Wzorce proste

Wzorce proste w bash określają ścieżki w drzewie katalogów.

ElementOpis
*Brak albo dowolna ilość dowolnych znaków
?Jeden dowolny znak
[znaki]Dowolny znak z określonej listy
[^znaki]Dowolny znak nie występujący w określonej liście
literałCytowana treść

Ponadto wyróżniamy składnię fraza-{a,b}, który generuje frazy fraza-a i fraza-b.

Uwaga

Wzorce proste są składnią różną od wyrażeń regularnych.

Zmienne środowiskowe

Zmienne środowiskowe dotyczą procesu w systemie operacyjnym.

Komendy zarządzające zmiennymi w powłokach sh

PolecenieInformacja
envWyświetl wszystkie zmienne środowiskowe powłoki
nazwa=wartośćUstaw zmienną środowiskową procesu powłoki
export nazwaWłącz dziedziczenie zmiennej środowiskowej przez kolejne procesy uruchomione w powłoce
SkładniaInformacja
${nazwa}Wstaw wartość zmiennej o określonej nazwie
${nazwa:-wartość}Wstaw wartość zmiennej o określonej nazwie, a jeżeli nie istnieje, wstaw podaną wartość

Kody powrotu

Kody powrotu są zwracane przez każde polecenie wywołane w powłoce.

Kod wyjściaWartość logicznaInformacja
0PrawdaOperacja wykonana pomyślnie
innyFałszOperacja niewykonana pomyślnie
SkładniaInformacja
$?Zwróć kod statusu ostatnio wykonanej komendy
&&Jeżeli polecenie po lewej stronie zwróci prawdę, wykonaj polecenie po prawej
||Jeżeli polecenie po lewej stronie zwróci fałsz, wykonaj polecenie po prawej

Operatory przekierowania strumieni

Operator wstawiamy po poleceniu, na którym będziemy wykonywać przekierowanie strumienia.

OperatorInformacja
|Przekieruj wyjście polecenia po lewej na wejście polecenia po prawej od znaku
>Przekieruj wyjście standardowe polecenia do pliku, nadpisując ten plik
>>Przekieruj wyjście standardowe polecenia do pliku, dopisując do tego pliku
<Przekieruj wejście polecenia, aby to było pobierane z pliku

Plikiem może być również deskryptor pliku odnoszący się do strumienia.

W przypadku przypisywania do deskryptora pliku odnoszącego się do strumienia należy taki poprzedzić znakiem &.

Na danym poleceniu można wykonać wiele przekierowań.

Polecenie test

Polecenie test służy do sprawdzania danego warunku, zwracając wartość logiczną w kodzie powrotu

Składnia polecenia test porównująca pierwszą frazę z drugą

test fraza1 operatorPorównania fraza2

Operator porównaniaWarunek
-eqLiczba równa drugiej
-ltLiczba mniejsza od drugiej
-leLiczba mniejsza od drugiej, lub równa drugiej
-gtLiczba większa od drugiej
-geLiczba większa od drugiej, lub równa drugiej
=Napis równoważny drugiemu

[ jest aliasem polecenia test, które należy zakończyć argumentem ].

Uwaga

Nie należy mylić [ (inaczej test) z [[. Obsługują one inny zestaw operatorów i w pewnych przypadkach mają różne działanie.

Składnia polecenia test sprawdzająca frazę

test operatorWarunku fraza

Operator warunkuWarunek
-zNapis jest pusty
-eŚcieżka istnieje
-dKatalog istnieje
-fPlik istnieje
-LDowiązanie symboliczne istnieje

Instrukcja warunkowa

bash
if komendaSprawdzająca; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # komenda sprawdzająca zwróci kod 0
  polecenia
fi
if komendaSprawdzająca; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # komenda sprawdzająca zwróci kod 0
  polecenia
fi
bash
if komendaSprawdzająca; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # komenda sprawdzająca zwróci kod 0
  polecenia
else
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # komenda sprawdzająca zwróci kod różny od 0
  polecenia
fi
if komendaSprawdzająca; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # komenda sprawdzająca zwróci kod 0
  polecenia
else
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # komenda sprawdzająca zwróci kod różny od 0
  polecenia
fi
bash
if komendaSprawdzająca1; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # pierwsza komenda sprawdzająca zwróci kod 0
  polecenia
elif komendaSprawdzająca2; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # pierwsza komenda sprawdzająca zwróci kod różny od 0
  # druga komenda sprawdzająca zwróci kod 0
  polecenia
else
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # wszystkie komendy sprawdzające zwrócą kod różny od 0
  polecenia
fi
if komendaSprawdzająca1; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # pierwsza komenda sprawdzająca zwróci kod 0
  polecenia
elif komendaSprawdzająca2; then
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # pierwsza komenda sprawdzająca zwróci kod różny od 0
  # druga komenda sprawdzająca zwróci kod 0
  polecenia
else
  # wykonane zostaną polecenia z tego bloku, jeżeli
  # wszystkie komendy sprawdzające zwrócą kod różny od 0
  polecenia
fi

Polecenie if może zawierać wiele bloków elif i maksymalnie jeden blok else.

Pętle

Pętla, w przeciwieństwie do instrukcji warunkowej, może wykonywać polecenia więcej niż jeden raz.

bash
while komendaSprawdzająca; do
  # wykonane zostaną polecenia z tego bloku po każdej iteracji
  # wywołania komendy sprawdzającej, dopóki ta nie zwróci kodu
  # różnego od 0
  polecenia
done
while komendaSprawdzająca; do
  # wykonane zostaną polecenia z tego bloku po każdej iteracji
  # wywołania komendy sprawdzającej, dopóki ta nie zwróci kodu
  # różnego od 0
  polecenia
done

Pętla for

Pętla for iteruje po każdym elemencie przekazanej listy argumentów

bash
for element in listaArgumentów; do
  polecenia
done
for element in listaArgumentów; do
  polecenia
done

Funkcje

Ta część strony została oznaczona, jakoby była w trakcie konstrukcji. To oznacza, że treść w miejscu tego komunikatu zostanie uzupełniona w najbliższym czasie.
bash

# definicja funkcji
funkcja() {
  # polecenia które zostaną wykonane przy wywołaniu funkcji
  # zmienne "$@", $1, $2, ..., $*, przechowują argumenty (sposób wywołania funkcji)
  polecenia
}

# wywołanie funkcji
funkcja

# definicja funkcji
funkcja() {
  # polecenia które zostaną wykonane przy wywołaniu funkcji
  # zmienne "$@", $1, $2, ..., $*, przechowują argumenty (sposób wywołania funkcji)
  polecenia
}

# wywołanie funkcji
funkcja

Inne powłoki polecenia

Nazwa powłokiInformacja
bashStandardowa powłoka w środowisku GNU
zshAlternatywna powłoka dla zaawansowanych użytkowników
fishPrzyjazna powłoka z unikatową składnią
dashWydajna powłoka do wykonywania skryptów zgodnych ze standardem POSIX