Skrypty Bash – instrukcje warunkowe, pętle i funkcje

article-thumbnail

Wstęp

W związku z tym, że tworzone przez nasz skrypty bash, będą miały coraz większą złożoność, koniecznym staje sie użycie jakiegoś rodzaju systemu umożliwające ich łatwiejsze odczytywanie. W takim celu stosuj sie komentarze. Komentarz tworzymy, stosujący symbol #. Pamiętajmy, że zakomentowane fragmenty, nie będą brane przez interpreter pod uwagę. W związku z tym zapis # polecenie, nie zostanie wykonany.

kod prezentujący omawiane zagadnienie

Instrukcje warunkowe

Skrypty zazwyczaj wykonują różne operacje, w zależności od sytuacji. Przykładowo skrypt utwórzFolder, najpierw sprawdza czy folder o określonej nazwie istnieje, a później albo ulega zakończeniu, albo go tworzy. Polecenia które służą do podejmowania decyzji przez program, nazywamy instrukcjami warunkowymi. O ile składnia polecenia warunkowego jest prosta, tak mnogość parametrów przez niego używana jest duża. Poniżej zamieszczam najważniejsze parametry, których używamy w poleceniach warunkowych.

  • -d folder – katalog istnieje
  • -f plik – plik istnieje
  • -e plik_lub_katalog – plik lub katalog istnieje
  • n ciąg – prawda czy długość ciągu jest większą od zera
  • argument1 -eq argument2 – sprawdza, czy argument pierwszy jest równy drugiemu
  • argument1 -gt argument2 – sprawdza, czy argument pierwszy jest większy od drugiego
  • argument1 -ge argument2 – sprawdza, czy argument pierwszy jest większy lub równy drugiemu
  • argument1 -lt argument2 – sprawdza, czy argument pierwszy jest mniejszy od drugiego
  • argument1 -le argument2 – sprawdza, czy argument pierwszy jest mniejszy lub równy drugiemu
  • argument1 -ne argument2 – sprawdza, czy argument pierwszy jest różny on drugiego

Składnia polecenia if wygląda następująco:

#!/bin/bash

#zapis podstawowy
if [wyrażenie_warunkowe]
then
  polecenia
fi

#polecenie z uwzględnieniem "w przeciwnym wypadku"
if [wyrażenie_warunkowe]
then
  polecenia
else //wykona się, jeśli warunek nie jest spełniony
  polecenia
fi

Wykonajmy więc skrypt bash, który sprawdzi czy pierwsza liczba jest większa, mniejsza czy równa drugiej.

Skrypt

Pętla for

Często podczas pisania skryptów zdarza się, że musimy wykonać powtarzające się czynności. Służą do tego pętle i funkcje. Pętle wykonują dane operacje określoną ilość razy, jedna po drugiej. Funkcje natomiast pozwalają wykonać dany fragment kodu, bez konieczności jego przepisywania.

Podstawową pętlą jest for. Jej składnia wyglada następująco:

#!/bin/bash

#Pierwsza metoda zapisu (używana zwłaszcza do odczytywania plików):
for <zmienna> in <lista>; #za listę możemy podstawić liczby oddzielone spacją lub pliki.
  do
  	polecenia
  done
  
#Druga metoda zapisu tzw. Podejście C 
for ((<zmienna>=wartość_początkowa; wyrażenie_warunkowe; działania na <zmienna>)) #zapis zbliżony do tego znanego z języka C/C++.
  do
  	polecenia
  done
  
#Trzecia metoda zapisu:
  for <zmienna> in $((seq <początek> <koniec>' #kolejne liczby od wartości początkowej (domyślnie = 0) do wartości końcowej.
  do
  	polecenia
  done
  

Stworzymy teraz prosty skrypt, który wypisze nam najpierw wyświetli nam wszystkie pliki i podkatalogi w bieżącym folderze, a następnie stworzy określoną liczbę plików z nazwami plik<numer>.txt.

Pętla While

Pętla while działa w oparciu o instrukcję warunkową, która kończy działanie pętli. Jest składnia wygląda tak:

#!/bin/bash

while [ warunek ];
  do
    polecenia
  done

Nauczyciele programowania mawiają, że najlepiej uczyć się poprzez praktykę, więc wykonamy prosty skrypt, który będzie sumował kolejne liczby, dopóki nie osiagnie wartości 100 lub większej. Wykorzystamy przy tym pętlę while.

Stosowanie Funkcje

Funkcją nazywamy wydzielony fragment kodu, który może (ale nie musi) przyjmować argumenty i zwracać wyniki jego wykonania. Używamy jej w celu zapobiegania powtarzaniu tego samego kodu kilkukrotnie. Składnię funkcji i jej wywołanie przedstawia poniższy kod:

#!/bin/bash

#definiowanie funkcji
nazwaFunkcji(argumenty) #nawias może być pusty, wówczas funkcja nie przyjmuje żadnych argumentów
{
  polecenia
  #opcjonalnie funkcja może zwrócić jakąś wartość. Służy do tego słowo kluczowe return
  return <zwracana wartość>
}

#wywołanie funkcji
nazwaFunkcji argumenty

Wykonajmy pełnoprawny kalkulator w oparciu o instrukcje warunkowe, pętle i funkcje.