Bash skrypty

Polecenia BASHA można łączyć ze sobą tworząc skrypty, które dodatkowo mogą zawierać np. wyrażenia logiczne oraz odwoływać się do innych aplikacji.

Jako zwykły użytkownik wykonaj w konsoli:
touch skrypt
chmod 755 skrypt
Następnie otwórz plik "skrypt" w edytorze (nano, pico, jakiś ze środowiska graficznego). I wpisz następującą zawartość:
echo 'To jest tekst'
echo "A to drugi"
zmienna="cześć"
echo "Wartość zmiennej to: $zmienna"
echo 'Pojedynczy cudzysłów i $zmienna'
Następnie wykonaj plik wpisując w konsoli ./plik . Zobaczysz coś takiego:
To jest tekst
A to drugi
Wartość zmiennej to: cześć
Pojedynczy cudzysłów i $zmienna
Powyższy skrypt BASHa prezentuje podstawowe jego składniki. Polecenie echo wyświetla tekst, jeżeli jest on w podwójnym cudzysłowie - będzie parsowany przez powłokę (zmienne zostaną zamienione na ich wartości) jeżeli pojedyncze - tekst nie będzie parsowany przez powłokę. Zmienną deklarujemy:
zmienna = "wartość"
A wywołujemy za pomocą $zmienna (dodajemy znak dolara). Skrypt kończy wywołanie zmiennej w tekście z podwójnymi i pojedynczymi cudzysłowami. W przypadku tych drugich "$zmienna" nie zostanie zamieniona na wartość zmiennej. Zmienną można też wyświetlić bezpośrednio: echo $zmienna

Pobieranie danych od użytkownika

Chcemy skrypt, który poprosi użytkownika o dane, np:
echo 'Jak masz na imię?'
read zmienna
echo "Twoje imie to: $zmienna"
Wykonanie skryptu spowoduje wyświetlenie tekstu "Jak masz na imię?", a użytkownik będzie mógł wprowadzić dane, np. jeżeli wpiszemy "Piotr" to skrypt odpowie "Twoje imie to: Piotr". Skorzystaliśmy tutaj komendy read (read nazwa_zmiennej). Komenda ta czeka aż użytkownik wpisze coś i wciśnie enter. To co wpisał przypisane zostanie zmiennej o podanej nazwie.

Skrypt przykładowy 1 - Generator wizytówki - coś ala BASHowa księga gości

Chcemy prosty skrypt BASHA, który pobierze dane takie jak Imię i Nazwisko, adres Email i numer GG i zapisze do pliku. Oto kod
#!/bin/bash
echo 'Witaj w generatorze wizytówek v. 13.666'
echo '#####################################'
echo 'Program poprosi cię o wpisanie różnych danych.'
echo 'Po wpisaniu wciśnij Enter by przejść dalej.'
echo '#####################################'
echo 'Podaj swoje Imię i Nazwisko:'
read name
echo 'Podaj swój adres E-Mail:'
read mail
echo 'Podaj numer Gadu-Gadu:'
read gg
echo '#####################################'
echo 'Pobieranie danych zakończone'
touch wizytowka.txt
echo "$name" >> wizytowka.txt
echo "Email: $mail" >> wizytowka.txt
echo "Gadu-Gadu $gg" >> wizytowka.txt
echo 'Generowanie wizytówki zakończone'
echo 'Plik wizytowka.txt gotowy!'
echo '#####################################'
Wykonanie skryptu będzie wyglądać np. tak:
Witaj w generatorze wizytówek v. 13.666
#####################################
Program poprosi cię o wpisanie różnych danych.
Po wpisaniu wciśnij Enter by przejść dalej.
#####################################
Podaj swoje Imię i Nazwisko:
Piotr M
Podaj swój adres E-Mail:
tajny@email.pl
Podaj numer Gadu-Gadu:
123456
#####################################
Pobieranie danych zakończone
Generowanie wizytówki zakończone
Plik wizytowka.txt gotowy!
#####################################
I stworzy plik wizytowka.txt o zawartości:
Piotr M
Email: tajny@email.pl
Gadu-Gadu 123456
Przy okazji >> dopisuje dane do pliku więc wielokrotne wywołanie skryptu nie nadpisze danych...

Parametry wywołania

Wiele aplikacji przyjmuje parametry, np. ls -a. Bardzo prosto parametry te "przechwycić".
#!/bin/bash
echo "Nazwa skryptu to: $0"
echo '------------------------------------'
echo "Nazwa pierwszego argumentu to: $1"
echo '------------------------------------'
echo "Wszystkie argumenty: $*"
echo '------------------------------------'
echo "Podałeś $# poleceń"
Wywołanie ./a2.sh polecenie1 polecenie2 polecenie3 wyświetli:
Nazwa skryptu to: ./a2.sh
------------------------------------
Nazwa pierwszego argumentu to: polecenie1
------------------------------------
Wszystkie argumenty: polecenie1 polecenie2 polecenie3
------------------------------------
Podałeś 3 poleceń
$0 - nazwa skryptu, $n - wartość n-tego parametru, $* - wszystkie parametry, $# - liczba poleceń.

Skrypt przykładowy 2 - Generator wizytówki z wyborem pliku

#!/bin/bash
echo 'Witaj w generatorze wizytówek v. 13.666'
echo '#####################################'
echo 'Program poprosi cię o wpisanie różnych danych.'
echo 'Po wpisaniu wciśnij Enter by przejść dalej.'
echo '#####################################'
echo 'Podaj swoje Imię i Nazwisko:'
read name
echo 'Podaj swój adres E-Mail:'
read mail
echo 'Podaj numer Gadu-Gadu:'
read gg
echo '#####################################'
echo 'Pobieranie danych zakończone'
touch $1
echo "$name" >> $1
echo "Email: $mail" >> $1
echo "Gadu-Gadu $gg" >> $1
echo 'Generowanie wizytówki zakończone'
echo "Plik $1 gotowy!"
echo '#####################################'
Zakładamy że skrypt wywołujemy podając jeden parametr - nazwę pliku :)

Instrukcje warunkowe

Możemy korzystać z instrukcji warunkowych - Jeżeli coś to wtedy, a jeżeli nie to coś... Porównania i operacje logiczne:
PORÓWNANIA LICZBOWE
-gt: większy od
-lt: mniejszy od
-ge: większy, równy od
-le: mniejszy, równy od
-eq: równy
-ne: różny od
PORÓWNANIA TEKSTOWE
-z: sprawdza czy ciąg jest pusty
-n: sprawdza wartość ciągu
=: równy
!=: różny
Str: sprawdza czy ciąg jest zerowy
OPERACJE LOGICZNE
-a: Logiczne i (zamiast -a można stosować &&)
-o: Logiczne lub (można stosować też ||)
!: Logiczne nie
TESTY NA PLIKACH
-f: Plik istnieje i jest zwykłym plikiem
-s: Plik nie jest pusty
-r: Plik jest możliwy do odczytu
-w: Plik może być modyfikowany
-x: Plik może być uruchamiany
-d: Jest katalogiem
-h: Jest dowiązaniem symbolicznym
-c: Nazwa odnosi się do urządzenia
Instrukcja warunkowa IF... ma postać:
if komenda then
	akcja
fi

if komenda then
	akcja
else
	akcja
fi
Przykład:
if [ "$#" -gt 2 ]
	then
	echo 'Podałeś więcej niż 2 parametry'
	else
	echo 'Podałeś mniej niż 2 parametry'
fi
Wielkość liter operatorów i spacje mają znaczenie! Powyższy kod wyświetli "Podałeś więcej niż 2 parametr" jeżeli wywołamy skrypt z 3 lub większą ilością parametrów, a "Podałeś mniej niż 2 parametry" jeżeli będzie ich 2 lub mniej. Instrukcje warunkowe można rozbudowywać o elif - else if:
if [ "$#" -gt 2 ]
	then
	echo 'Podałeś więcej niż 2 parametry'
	elif [ "$#" -eq 2 ]
	then
	echo 'Podałeś 2 parametry'
	else
	echo 'Podałeś mniej niż 2 parametry'
fi
Warunki można łączyć za pomocą operatorów logicznych:
if [ "$#" -gt 2 -a "$#" -lt 5 ]
	then
	echo 'Podałeś więcej niż 2 parametry'
	else
	echo 'Podałeś albo mniej niż 2 parametry lub więcej niż 5'
fi


Pętle

- while komenda do akcja done - while wykonuje akcję dopóki komenda ma wartość Prawda (true)
- until komenda do akcja done - until wykonuje akcję dopóki komenda ma wartość Fałsz (false)
- for zmienna in lista-wartości do akcja done - Pętla for-in zaprojektowana została do użytku z listami wartości. Są one kolejno przyporządkowywane zmiennej
-for zmienna do akcja done - Odnosi się do argumentów skryptu przyporządkowując je kolejno zmiennej

#!/bin/bash
for plik in /home/piotr/*
do
echo "Plik lub katalog: $plik"
done
Dla każdego elementu w /home/piotr (plik lub katalog) wykonaj (do) echo :) Po kolei nazwa pliku/katalogu przypisywana jest zmiennej $plik.

#!/bin/bash
for parametr
do
echo "Plik $parametr ma hasza:"
md5sum $parametr
done
Skrypt wywołujemy: skrypt.sh plik1.txt plik2.txt - z nazwami plików jako parametry. Dla każdego pliku (w tym przykładzie, nie muszą to być zawsze pliki) obliczamy sumę kontrolną w md5.

#!/bin/bash
powtorka = "tak"
while [ "$powtorka"==tak ]
do 
echo -n $powtorka
echo 'Witaj w generatorze wizytówek v. 13.666'
echo '#####################################'
echo 'Program poprosi cię o wpisanie różnych danych.'
echo 'Po wpisaniu wciśnij Enter by przejść dalej.'
echo '#####################################'
echo 'Podaj swoje Imię i Nazwisko:'
read name
echo 'Podaj swój adres E-Mail:'
read mail
echo 'Podaj numer Gadu-Gadu:'
read gg
echo '#####################################'
echo 'Pobieranie danych zakończone'
touch $1
echo "$name" >> $1
echo "Email: $mail" >> $1
echo "Gadu-Gadu $gg" >> $1
echo 'Generowanie wizytówki zakończone'
echo "Plik $1 gotowy!"
echo '#####################################'
echo 'Wpisz "tak" jeżeli chcesz dodać kolejny wpis'
read powtorka
done
RkBlog

Wprowadzenie do świata Linuksa, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact