5 przykładów skryptów Bash, które pomogą Ci nauczyć się programowania w systemie Linux

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 
  • 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:

  • 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 
  • 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 a

echo "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`
;;
esac

echo "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