<Poprzedni | Spis treści | Następne>
Przypisywanie wartości do zmiennych i stałych
Tutaj nasza wiedza o ekspansji naprawdę zaczyna się opłacać. Jak widzieliśmy, zmiennym przypisuje się wartości w ten sposób:
zmienna=wartość
gdzie zmienna jest nazwą zmiennej i wartość jest ciągiem znaków. W przeciwieństwie do niektórych innych języków programowania, powłoka nie zwraca uwagi na typ danych przypisanych do zmiennej; traktuje je wszystkie jako ciągi znaków. Możesz zmusić powłokę do ograniczenia przypisania do liczb całkowitych, używając ogłosić polecenie z -i opcja, ale podobnie jak w przypadku ustawiania zmiennych jako tylko do odczytu, jest to rzadko stosowane.
Należy zauważyć, że w zadaniu nie może być żadnych spacji między nazwą zmiennej, znakiem równości i wartością. Z czego więc może składać się wartość? Czegokolwiek, co możemy rozszerzyć do ciągu:
a=z
b="ciąg"
c="ciąg znaków i $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta ciąg\n"
# Przypisz ciąg „z” do zmiennej a.
# Spacje muszą być ujęte w cudzysłów.
# Można stosować inne rozszerzenia, takie jak zmienne
# rozszerzono w zadaniu.
# Wyniki polecenia.
# Rozszerzenie arytmetyczne.
# Sekwencje specjalne, takie jak tabulatory i nowe linie.
a=z
b="ciąg"
c="ciąg znaków i $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta ciąg\n"
W jednym wierszu można wykonać wiele przypisań zmiennych:
a=5 b="ciąg"
a=5 b="ciąg"
Podczas rozwijania nazwy zmiennych mogą być otoczone opcjonalnymi nawiasami klamrowymi „{}”. Jest to przydatne w przypadkach, gdy nazwa zmiennej staje się niejednoznaczna ze względu na otaczające ją
tekst. Tutaj próbujemy zmienić nazwę pliku z mój plik do mójplik1, używając zmiennej:
[ja@linuxbox ~]$ nazwapliku="mójplik" [ja@linuxbox ~]$ dotknij $filename [ja@linuxbox ~]$ mv $nazwapliku $nazwapliku1
mv: brak operandu pliku docelowego po `myfile' Aby uzyskać więcej informacji, spróbuj `mv --help'.
[ja@linuxbox ~]$ nazwapliku="mójplik" [ja@linuxbox ~]$ dotknij $filename [ja@linuxbox ~]$ mv $nazwapliku $nazwapliku1
mv: brak operandu pliku docelowego po `myfile' Aby uzyskać więcej informacji, spróbuj `mv --help'.
Ta próba się nie powiedzie, ponieważ powłoka interpretuje drugi argument mv polecenie jako nową (i pustą) zmienną. Problem można rozwiązać w ten sposób:
[ja@linuxbox ~]$ mv $nazwa_pliku ${nazwa_pliku}1
[ja@linuxbox ~]$ mv $nazwa_pliku ${nazwa_pliku}1
Dodając otaczające nawiasy klamrowe, powłoka nie interpretuje już końcowego 1 jako część nazwy zmiennej.
Skorzystamy z okazji, aby dodać do naszego raportu pewne dane, mianowicie datę i godzinę utworzenia raportu oraz nazwę użytkownika, który go stworzył:
#! / bin / bash
# Program do wyprowadzania strony z informacjami o systemie TITLE="Raport z informacjami o systemie dla $HOSTNAME"
CZAS_BIEŻĄCY=$(data +"%x %r %Z")
TIMESTAMP="Wygenerowano $CURRENT_TIME, przez $USER"
Echo "
$TYTUŁ
$TYTUŁ
$ZNACZNIK CZASOWY
"
#! / bin / bash
# Program do wyprowadzania strony z informacjami o systemie TITLE="Raport z informacjami o systemie dla $HOSTNAME"
CZAS_BIEŻĄCY=$(data +"%x %r %Z")
TIMESTAMP="Wygenerowano $CURRENT_TIME, przez $USER"
Echo "
$TYTUŁ
$TYTUŁ
$ZNACZNIK CZASOWY
"