<Poprzedni | Spis treści | Następne>
Zmienne i stałe
Jest jednak problem z naszym skryptem. Zauważ, jak powtarza się ciąg „Raport informacji o systemie”? W przypadku naszego małego skryptu nie stanowi to problemu, ale wyobraźmy sobie, że nasz skrypt był naprawdę długi i mieliśmy wiele wystąpień tego ciągu. Gdybyśmy chcieli zmienić tytuł na inny, musielibyśmy go zmieniać w wielu miejscach, co mogłoby wymagać dużo pracy. Co by było, gdybyśmy mogli tak ułożyć skrypt, aby ciąg znaków pojawiał się tylko raz, a nie wielokrotnie? To znacznie ułatwiłoby przyszłą konserwację skryptu. Oto jak moglibyśmy to zrobić:
#! / bin / bash
# Program wyświetlający stronę z informacjami o systemie
title="Raport informacji o systemie"
Echo "
$tytuł
$tytuł
"
#! / bin / bash
# Program wyświetlający stronę z informacjami o systemie
title="Raport informacji o systemie"
Echo "
$tytuł
$tytuł
"
Tworząc zmienna o imieniu tytuł i przypisując mu wartość „Raport informacji o systemie”, możemy skorzystać z rozwijania parametrów i umieścić ciąg znaków w wielu lokalizacjach.
Jak zatem stworzyć zmienną? Proste, po prostu z niego korzystamy. Gdy powłoka napotyka zmienną, automatycznie ją tworzy. Różni się to od wielu języków programowania, w których zmienne muszą być jawnie Deklarowana lub zdefiniowane przed użyciem. Powłoka jest pod tym względem bardzo luźna, co może prowadzić do pewnych problemów. Rozważmy na przykład następujący scenariusz rozgrywany w wierszu poleceń:
[ja@linuxbox ~]$ foo="tak" [ja@linuxbox ~]$ powtórz $foo tak
[ja@linuxbox ~]$ powtórz $głupca
[ja@linuxbox ~]$
[ja@linuxbox ~]$ foo="tak" [ja@linuxbox ~]$ powtórz $foo tak
[ja@linuxbox ~]$ powtórz $głupca
[ja@linuxbox ~]$
Najpierw przypisujemy zmiennej wartość „tak”. bla, a następnie wyświetl jego wartość za pomocą przegapić. Następnie wyświetlamy wartość nazwy zmiennej zapisanej błędnie jako „fool” i otrzymujemy pusty wynik. Dzieje się tak, ponieważ powłoka szczęśliwie utworzyła zmienną oszukać kiedy go napotkał, i nadał mu domyślną wartość nic lub pustą. Z tego dowiadujemy się, że musimy zwracać szczególną uwagę na naszą pisownię! Ważne jest również, aby zrozumieć, co naprawdę wydarzyło się w tym przykładzie. Z naszego poprzedniego spojrzenia na to, jak powłoka wykonuje ekspansje, wiemy, że polecenie:
[me@linuxbox ~]$ echo $foo
[me@linuxbox ~]$ echo $foo
ulega ekspansji parametrów i skutkuje:
[me@linuxbox ~]$ echo tak
[me@linuxbox ~]$ echo tak
Natomiast polecenie:
[me@linuxbox ~]$ echo $głupiec
[me@linuxbox ~]$ echo $głupiec
rozwija się w:
[me@linuxbox ~]$ echo
[me@linuxbox ~]$ echo
Pusta zmienna rozwija się w nic! Może to spowodować spustoszenie w przypadku poleceń wymagających argumentów. Oto przykład:
[ja@linuxbox ~]$ foo=foo.txt [ja@linuxbox ~]$ foo1=foo1.txt [ja@linuxbox ~]$ cp $foo $głupiec
cp: brak operandu pliku docelowego po `foo.txt'
[ja@linuxbox ~]$ foo=foo.txt [ja@linuxbox ~]$ foo1=foo1.txt [ja@linuxbox ~]$ cp $foo $głupiec
cp: brak operandu pliku docelowego po `foo.txt'
Aby uzyskać więcej informacji, użyj polecenia `cp --help'.
Aby uzyskać więcej informacji, użyj polecenia `cp --help'.
Przypisujemy wartości dwóm zmiennym, bla oraz głupku. Następnie wykonujemy a cp, ale błędnie napisz nazwę drugiego argumentu. Po rozszerzeniu cp do polecenia wysyłany jest tylko jeden argument, choć wymaga dwóch.
Istnieją pewne zasady dotyczące nazw zmiennych:
1. Nazwy zmiennych mogą składać się ze znaków alfanumerycznych (liter i cyfr) oraz znaków podkreślenia.
2. Pierwszym znakiem nazwy zmiennej musi być litera lub znak podkreślenia.
3. Niedopuszczalne są spacje i znaki interpunkcyjne.
Słowo „zmienna” oznacza wartość, która się zmienia i w wielu zastosowaniach zmienne są używane w ten sposób. Jednak zmienna w naszej aplikacji, tytuł, jest używany jako stały. Stała przypomina zmienną pod tym względem, że ma nazwę i zawiera wartość. Różnica polega na tym, że wartość stałej nie ulega zmianie. W aplikacji wykonującej obliczenia geometryczne możemy zdefiniować PI jako stałą i przypisz jej wartość 3.1415, zamiast używać tej liczby dosłownie w całym programie. Powłoka nie rozróżnia zmiennych i stałych; służą głównie wygodzie programisty. Powszechną konwencją jest używanie wielkich liter do oznaczania stałych i małych liter w przypadku prawdziwych zmiennych. Zmodyfikujemy nasz skrypt, aby był zgodny z tą konwencją:
#! / bin / bash
# Program wyświetlający stronę z informacjami o systemie TYTUŁ="Raport informacji o systemie Dla $HOSTNAME" Echo "
$TYTUŁ
$TYTUŁ
"
#! / bin / bash
# Program wyświetlający stronę z informacjami o systemie TYTUŁ="Raport informacji o systemie Dla $HOSTNAME" Echo "
$TYTUŁ
$TYTUŁ
"
Skorzystaliśmy również z okazji, aby urozmaicić nasz tytuł, dodając wartość zmiennej powłoki
NAZWA HOSTA. To jest nazwa sieciowa urządzenia.
Note: Powłoka faktycznie umożliwia wymuszenie niezmienności stałych poprzez użycie metody ogłosić wbudowane polecenie z -r opcja (tylko do odczytu). Gdybyśmy przydzielili TYTUŁ tą drogą:
zadeklaruj -r TITLE="Tytuł strony"
powłoka uniemożliwiłaby późniejsze przypisanie do TYTUŁ. Ta funkcja jest rzadko używana, ale istnieje w przypadku bardzo formalnych skryptów.