Skrypty Bash
Skrypty Bash pozwalają na wykonanie serii poleceń terminala bez konieczności ich ręcznego wprowadzania. Podstawowa zasada jest taka: wszystko, co możemy uruchomić z terminala, możemy również wykonać przy użyciu skryptu. Działa to również w drugą stronę: wszystko, co możemy zrobić w skrypcie, można również wykonać w terminalu.
Konfiguracja
Zazwyczaj nie ma potrzeby specjalnej konfiguracji. Jednak pierwsza linia skryptu powinna wskazywać systemowi, którego interpretera użyć. Choć większość powłok domyślnie zakłada użycie własnego interpretera, warto to zawsze sprecyzować.
Aby sprawdzić lokalizację interpretera Bash, używamy polecenia:
1
which bash
Najczęściej odpowiedzią będzie /bin/bash
.
W pierwszej linii skryptu wskazujemy interpreter w następujący sposób:
1
#!/bin/bash
Tworzenie pierwszego skryptu
Utwórz pusty plik o dowolnej nazwie. Pamiętaj, że w systemie Linux pliki nie muszą mieć rozszerzeń, aby działały poprawnie. Jednak dla czytelności i łatwiejszego rozpoznawania skryptów Bash zazwyczaj nadaje się im rozszerzenie .sh
.
Przykładowo, możemy użyć edytora tekstu geany
do utworzenia skryptu:
1
geany skrypt1.sh &
Dodanie znaku &
po poleceniu powoduje uruchomienie programu w tle, dzięki czemu terminal pozostaje dostępny.
Przykład prostego skryptu (skrypt1.sh
):
1
2
3
#!/bin/bash
echo "Wypisanie wszystkich plików z katalogu:"
ls
Ten skrypt najpierw wyświetli komunikat za pomocą polecenia echo
, a następnie wypisze listę plików w bieżącym katalogu za pomocą polecenia ls
.
Aby uruchomić skrypt, nadajemy mu uprawnienia wykonania:
1
chmod 755 skrypt1.sh
Następnie uruchamiamy go poleceniem:
1
./skrypt1.sh
Zmienne
W Bashu zmienne działają podobnie jak w innych językach programowania, z tą różnicą, że nie musimy deklarować ich typu. Przypisanie wartości do zmiennej odbywa się następująco:
1
zmienna='wartość'
Uwaga: Nie należy umieszczać spacji przed ani po znaku =
. Linia z niepoprawnym formatowaniem, np.:
1
zmienna = wartość
zostanie potraktowana jako próba wykonania polecenia zmienna
z argumentami =
i wartość
, co spowoduje błąd.
Aby odwołać się do wartości zmiennej w skrypcie, poprzedzamy jej nazwę znakiem dolara:
1
echo $zmienna
Przykład:
1
2
3
#!/bin/bash
tekst='To jest przykładowy tekst.'
echo $tekst
Operacje arytmetyczne
Bash pozwala na wykonywanie operacji matematycznych na liczbach całkowitych. Wynik działania arytmetycznego możemy przypisać do zmiennej na kilka sposobów:
Używając
$(( ))
:1
wynik=$(($zmienna1 + $zmienna2))
Używając polecenia
let
:1
let a=1+8
Używając polecenia
expr
:1
expr 5 + 2
Uwaga:
expr
wyświetla wynik na terminalu, zamiast przypisywać go do zmiennej.
Przykładowy skrypt wykonujący operacje arytmetyczne
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# Skrypt wykonujący podstawowe operacje arytmetyczne
liczba1=10
liczba2=5
# Dodawanie
suma=$(($liczba1 + $liczba2))
# Odejmowanie
roznica=$(($liczba1 - $liczba2))
# Mnożenie
iloczyn=$(($liczba1 * $liczba2))
# Dzielenie
if [ $liczba2 -ne 0 ]; then
iloraz=$(($liczba1 / $liczba2))
else
iloraz="Nie można dzielić przez zero"
fi
echo "Liczba 1: $liczba1"
echo "Liczba 2: $liczba2"
echo "Suma: $suma"
echo "Różnica: $roznica"
echo "Iloczyn: $iloczyn"
echo "Iloraz: $iloraz"
Opis skryptu:
- Definiujemy dwie zmienne
liczba1
iliczba2
. - Wykonujemy podstawowe operacje arytmetyczne: dodawanie, odejmowanie, mnożenie i dzielenie.
- Przy dzieleniu sprawdzamy, czy
liczba2
nie jest zerem, aby uniknąć dzielenia przez zero. - Wyświetlamy wyniki operacji za pomocą polecenia
echo
.
Uruchomienie skryptu:
- Zapisz skrypt w pliku
operacje.sh
. Nadaj uprawnienia wykonania:
1
chmod 755 operacje.sh
Uruchom skrypt:
1
./operacje.sh
Przykładowy wynik:
1
2
3
4
5
6
Liczba 1: 10
Liczba 2: 5
Suma: 15
Różnica: 5
Iloczyn: 50
Iloraz: 2
Przypisywanie wyniku polecenia do zmiennej
Możemy przypisać do zmiennej wynik dowolnego polecenia. W tym celu używamy odwrotnych apostrofów (backticks) `
lub składni $( )
. Zaleca się używanie tej drugiej metody ze względu na lepszą czytelność i możliwość zagnieżdżania.
Przykład z backticks:
1
2
data=`date`
echo "Aktualna data i czas: $data"
Przykład z $( )
:
1
2
data=$(date)
echo "Aktualna data i czas: $data"
Argumenty w skryptach
Po uruchomieniu skryptu pewne zmienne są automatycznie ustawiane:
$0
— nazwa skryptu$1
–$9
— argumenty przekazane do skryptu$#
— liczba argumentów
Przykład prostego dodawania z użyciem argumentów:
1
2
3
4
5
6
7
#!/bin/bash
if [ $# -eq 2 ]; then
suma=$(($1 + $2))
echo "Suma: $suma"
else
echo "Podaj dokładnie dwie liczby jako argumenty."
fi
Uruchomienie skryptu z dwoma argumentami:
1
./skrypt.sh 5 3
Wynik:
1
Suma: 8
Instrukcja warunkowa if
Instrukcja if
w Bashu ma następującą składnię:
1
2
3
4
if [ warunek ]
then
polecenia
fi
Porównania liczbowe
Operatory do porównań liczbowych:
-eq
— równe (==
)-ne
— różne (!=
)-gt
— większe niż (>
)-lt
— mniejsze niż (<
)-ge
— większe lub równe (>=
)-le
— mniejsze lub równe (<=
)
Przykład:
1
2
3
4
if [ $zmienna1 -gt $zmienna2 ]
then
echo "zmienna1 jest większa od zmiennej2"
fi
Porównania tekstowe
Operatory do porównań ciągów znaków:
=
— równe!=
— różne
Przykład:
1
2
3
4
if [ "$tekst1" = "$tekst2" ]
then
echo "Teksty są identyczne"
fi
Uwaga: Przy porównywaniu ciągów znaków zaleca się używanie cudzysłowów, aby uniknąć błędów związanych z białymi znakami czy pustymi wartościami.
Operatory logiczne
Operatory logiczne:
&&
— logiczne AND||
— logiczne OR
Przykład złożonego warunku:
1
2
3
4
if [ $zmienna1 -eq $zmienna2 ] && [ $zmienna2 -lt $zmienna3 ]
then
echo "Warunek spełniony"
fi
Konstrukcje else
i elif
Instrukcja if
może być rozszerzona o bloki else
i elif
:
1
2
3
4
5
6
7
8
9
if [ warunek1 ]
then
polecenia1
elif [ warunek2 ]
then
polecenia2
else
polecenia3
fi
Zadania
Wyświetlanie komunikatu w zależności od obecności argumentów:
Napisz skrypt, który wyświetla jeden komunikat, jeśli przekazano do niego jakiekolwiek argumenty, a inny komunikat, jeśli nie przekazano żadnych argumentów.
Wypisanie zawartości katalogu i liczby plików:
Napisz skrypt, który wypisze zawartość katalogu
Downloads
, a następnie poda, ile znajduje się w nim plików.Porównanie trzech parametrów:
Napisz skrypt, który porówna trzy przekazane parametry i wyświetli największy z nich. Jeśli zostanie podana inna liczba parametrów niż trzy, skrypt powinien wyświetlić komunikat o błędzie.
Filtracja danych z pliku:
Do zadania uzyj pliku
komputery.txt
z poprzednich zajec. Napisz skrypt, który jako argumenty przyjmuje trzy litery sektorów oraz pewna liczbęx
. Skrypt powinien wypisać pierwszychx
komputerów z tych sektorów.Zapisywanie wyniku polecenia
top
do pliku:Napisz skrypt, który zapisze wynik polecenia
top
do pliku o nazwielog[data_utworzenia]
, gdzie[data_utworzenia]
to aktualna data i godzina utworzenia pliku.