Podstawy

Czym jest skrypt powłoki?

Skrypt powłoki to niekompilowany plik tekstowy mogacy posiadać prawa wykonywalności, zawierający polecenia systemowe oraz polecenia sterujące jego wykonaniem (instrukcje, pętle itp.).

Wykonywany jest tylko i wyłącznie przez interpreter (tutaj /bin/bash), który wykonuje polecenia zawarte w skrypcie (mozna w dużym uproszczeniu powiedzieć, że tłumaczy je na język procesora).

Hello world

Każdy dobry kurs zaczyna się od przykładu Hello World nie inaczej, będzie w tym prypadku, posłuzy nam on by poznać strukturę skryptu powłoki.

# Tworzymy pusty plik//
touch helloworld.sh

Następnie edytujemy go dowolnym edytorem tekstowym (mcedit, pico, nano, vim, emacs itp) wpisując do niego nastepującą zawartość:

#!/bin/bash

#
# Hello world example
#

echo "Hello world"

Hello world – shebang

Pierwsza linia skryptu (nazywana shebang) - zaczynająca się od znaków: #! choć wygląda jak komentarz, nie jest nim - ma szczególne znaczenie - wskazuje na interpreter który powinien zostać użyty do wykonania skryptu, ścieżka do niego musi być podana w postaci bezwzględnej (nie można użyć dajmy na to samego bash) i musi się znajdować w pierwszej linii skryptu, bez żadnych poprzedzających odstępów. Tutaj skrypt zawsze będzie wykonywany przez interpreter poleceń /bin/bash, niezależnie od tego jakiego rodzaju powłoki w danej chwili używamy.

Znak # (hasz) oznacza komentarz, wszystko co znajduje się za nim w tej samej linii, jest pomijane przez interpreter.

Jedyne co nam pozostaje to nadać prawa wykonywalności skryptowi i uruchmomić go:

chmod 711 helloworld.sh
./helloworld.sh

Podpowiedź

Nie trzeba za każdym razem wpisywać pełnej nazwy skryptu - starczy wpisać parę początkowych liter i nacisnąć tabulator, a Bash uzupełni brakujące litery - jeśli plik istnieje.

Podpowiedź

Pierwsza linia skryptu nie jest obowiązkowa większość interpetrów zezwala na użycie składni:

/bin/bash nazwa_skrytpu_do_wykonania

Niemniej jednak gorąco zachęcam do używania shebang, ponieważ w systemach Unixowych rozszerzenie pliku nie ma większego znaczenia (to nie to co w Windows).