Skrypty w powłoce Bash stanowią jeden z najbardziej popularnych i dostępnych sposobów na interakcję z systemem Linux. Te proste przykłady pozwolą Ci zrozumieć, jak tworzyć skrypty i wprowadzą w podstawy programowania w Bashu.
1. Wyświetlenie „Hello World” w Bashu
Program „Hello World” to klasyczny przykład na start w nauce każdego języka programowania, i Bash nie jest wyjątkiem.
Oto kroki, aby wyświetlić tekst „Hello World” za pomocą skryptu Bash:
- Uruchom edytor tekstu i utwórz nowy plik, w którym umieścisz poniższy kod.
- Pierwsza linia skryptu Bash zawsze powinna wyglądać następująco:
#!/bin/bash
Ta linia, nazywana „shebang” (#!/bin/bash), jest kluczowa, ponieważ dzięki niej powłoka wie, w jaki sposób ma uruchomić skrypt. W tym przypadku, używa interpretera Bash.
- Każda linia zaczynająca się od symbolu # jest traktowana jako komentarz. Linia shebang to specjalny rodzaj komentarza, ale możesz dodawać własne, aby wyjaśnić działanie kodu. W linii drugiej dodaj np. taki komentarz:
# To jest przykładowy skrypt Bash
- Aby wyświetlić tekst na ekranie, użyj polecenia `echo`, po którym umieścisz tekst, który chcesz pokazać. W linii trzeciej dodaj:
echo "Hello World"
- Zapisz skrypt, najlepiej z rozszerzeniem .sh, na przykład `hello_world.sh`. Rozszerzenie pliku nie jest obowiązkowe, ale jest dobrą praktyką.
- Przed uruchomieniem skryptu, musisz nadać mu uprawnienia do wykonywania. Użyj polecenia `chmod` („change mode”) z argumentem `+x` („executable”), a następnie podaj nazwę skryptu:
chmod +x hello_world.sh
- Aby uruchomić skrypt, wpisz w terminalu polecenie:
./hello_world.sh
- Po uruchomieniu skryptu, na ekranie terminala zobaczysz tekst „Hello World”:
2. Tworzenie katalogu na podstawie danych wejściowych
W swoich skryptach możesz uruchamiać dowolne programy, które normalnie uruchamiasz z wiersza poleceń. Na przykład, możesz tworzyć nowe katalogi przy użyciu polecenia `mkdir`.
- Zacznij od linii shebang, tak jak poprzednio:
#!/bin/bash
- Poproś użytkownika o podanie nazwy katalogu, używając polecenia `echo`:
echo "Podaj nazwę nowego katalogu:"
- Użyj wbudowanego polecenia `read`, aby pobrać dane wprowadzone przez użytkownika. Pojedynczy argument definiuje nazwę zmiennej, w której powłoka przechowa dane wejściowe:
read newdir
- Aby użyć wartości przechowywanej w zmiennej, poprzedź jej nazwę znakiem dolara ($). Możesz przekazać wartość zmiennej `newdir` jako argument polecenia `mkdir`, aby utworzyć nowy katalog:
mkdir $newdir
- Po uruchomieniu tego skryptu, zostaniesz poproszony o wprowadzenie danych. Wpisz nazwę katalogu, a skrypt utworzy go w bieżącym folderze:
3. Tworzenie katalogu za pomocą argumentów linii komend
Alternatywą dla pobierania danych wejściowych interaktywnie jest przekazywanie argumentów do skryptu podczas jego uruchamiania. Większość poleceń Linuksa to obsługuje.
W skrypcie możesz użyć `$1`, aby odwołać się do specjalnej zmiennej, która przechowuje wartość pierwszego argumentu. `$2` odnosi się do drugiego argumentu i tak dalej.
- Użyj polecenia `mkdir` tak, jak w poprzednim przykładzie, ale tym razem użyj wbudowanej zmiennej `$1`:
#!/bin/bash
mkdir $1 - Uruchom skrypt, przekazując jako argument nazwę nowego katalogu:
./arg_dir.sh Test
- Zacznij od linii shebang:
#!/bin/bash
- Przed wywołaniem `mkdir`, sprawdź, czy pierwszy argument jest pusty (czyli, czy nie podano argumentu). Możesz to zrobić za pomocą instrukcji `if` w Bashu:
if [ -z "$1" ]; then
- Jeśli pierwszy argument jest pusty, wypisz błąd i zakończ skrypt:
echo "Proszę podać nazwę katalogu jako pierwszy argument"
exit - Słowo kluczowe „fi” (odwrócone „if”) oznacza koniec instrukcji `if` w Bashu:
fi
- Teraz skrypt może kontynuować działanie w sytuacji, gdy argument został podany:
mkdir $1
Możesz się zastanawiać, co się stanie, jeśli uruchomisz skrypt bez podania argumentu. Spróbuj, a zobaczysz, że otrzymasz komunikat o błędzie zaczynający się od „usage: mkdir”:
Jeśli nie podasz argumentu, wartość zmiennej `$1` będzie pusta. Skrypt wywoła `mkdir` bez argumentu, co spowoduje wyświetlenie tego błędu. Możesz temu zapobiec, sprawdzając warunek i wyświetlając bardziej czytelny komunikat o błędzie:
Po uruchomieniu nowej wersji skryptu, zobaczysz swój komunikat, jeśli zapomnisz podać argument:
4. Usuwanie pliku za pomocą funkcji w Bashu
Jeśli powtarzasz ten sam fragment kodu, warto go umieścić w funkcji. Funkcję możesz wywołać, kiedy tylko będziesz jej potrzebować.
Oto przykład funkcji, która usuwa wskazany plik.
- Zacznij od linii shebang:
#!/bin/bash
- Zdefiniuj funkcję, podając jej nazwę, potem puste nawiasy i polecenia w nawiasach klamrowych:
del_file() {
echo "Usuwanie $1"
rm $1
}Następnie, możesz wywołać funkcję i przekazać jej nazwę pliku do usunięcia:
del_file test.txt
Po wywołaniu funkcji, specjalna zmienna `$?` przechowuje status wyjścia ostatnio wykonanego polecenia. Status wyjścia jest pomocny w przypadku sprawdzania błędów; w tym przykładzie możesz sprawdzić, czy polecenie `rm` zakończyło się sukcesem:
if [ $? -ne 0 ]; then
echo "Przepraszam, nie można usunąć pliku"
fi
5. Tworzenie prostego kalkulatora do obliczeń arytmetycznych
Ostatni przykład to bardzo prosty kalkulator. Po jego uruchomieniu wprowadzisz dwie liczby i wybierzesz operację arytmetyczną.
Oto kod pliku `calc.sh`:
#!/bin/bash
echo "Wprowadź pierwszą liczbę: "
read aecho "Wprowadź drugą liczbę: "
read b
echo "Wybierz operację arytmetyczną:"
echo "1. Dodawanie"
echo "2. Odejmowanie"
echo "3. Mnożenie"
echo "4. Dzielenie"
read choice
case $choice in
1)
result=`echo $a + $b | bc`
;;2)
result=`echo $a - $b | bc`
;;3)
result=`echo $a \* $b | bc`
;;4)
result=`echo "scale=2; $a / $b" | bc`
;;
esacecho "Wynik: $result"
Zauważ użycie konstrukcji `case… esac`, która jest odpowiednikiem instrukcji `switch` w innych językach. Pozwala ona na porównanie zmiennej (w tym przypadku zmiennej `choice`) z kilkoma ustalonymi wartościami i wykonanie odpowiedniego bloku kodu.
Skrypt ten używa polecenia `bc` do wykonania każdego z obliczeń.
newsblog.pl