Wgląd w „zmienne” Linuksa w języku skryptowym powłoki — część 9
Napisaliśmy już serię artykułów na temat skryptów powłoki systemu Linux, które wówczas zostały ciepło przyjęte i nadal były bardzo istotne. Oto link do zbioru artykułów na temat skryptów powłoki.
- Naucz się skryptów powłoki systemu Linux
W tym artykule przyjrzymy się zmiennym, ich wykonaniu i implementacji w skrypcie powłoki.
Zapisywanie wyjścia
Dane wyjściowe polecenia można przekierować na standardowe wyjście lub do pliku, a także zapisać w zmiennej. Jeżeli wynik polecenia jest na tyle duży, że nie mieści się na ekranie, pozostaje nam jedynie możliwość zapisania wyniku do pliku w zmiennej. Jedną z zalet zapisywania wyników do zmiennej jest większa prędkość badania. Zmienne są zapisywane w pamięci i dlatego jest to zwykle szybsze w porównaniu do pobierania z pliku.
Zmienne w języku skryptowym
Zmienne są ważnym komponentem używanym w skryptach powłoki i są deklarowane za pomocą polecenia bash „Declare”. Aby zadeklarować zmienną powiedzmy „poziom”, musimy wykonać poniższe polecenie.
declare LEVEL
Uwaga: musimy użyć „typecast”, wbudowanej instrukcji zapewniającej kompatybilność powłoki Korn. Opcja „deklaruj” jest bardziej zaawansowana i zawiera wszystkie funkcje, dlatego jest zalecana podczas korzystania z BASH.
Zasady
- Nazwa zmiennej musi uzasadniać użycie zmiennej w skrypcie.
- Zdecydowanie zaleca się używanie tej samej nazwy zmiennej w całym programie.
- Nazwy zmiennych mogą być pisane zarówno wielkimi, jak i małymi literami, ale zgodnie z konwencją polecenia powłoki są pisane małymi literami, dlatego powinniśmy używać nazw zmiennych wielkimi literami, aby uniknąć wszelkich nieporozumień. np. TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT itp.
Realizacja
Zmiennej można przypisać wartość za pomocą znaku równości (=). Aby przypisać do zmiennej pusty ciąg znaków, nie wolno podawać żadnej wartości po znaku równości.
LEVEL =
Sprawdź wartość zapisaną w zmiennej „LEVEL” jako.
printf "%i" $LEVEL
printf, polecenie znane większości programistów „C”, wypisuje dane. %i – reprezentuje liczbę całkowitą. Możemy zastąpić go %c jako znak lub %c jako ciąg znaków, jeśli zajdzie taka potrzeba.
$LEVEL: Zwróć uwagę na „$”, który działa jako substytut wartości zmiennej „LEVEL”.
Przykładowe wyjście
printf "%i" $LEVEL
0
Przypisz wartość do zmiennej.
LEVEL=0
Sprawdź zapisane dane w zmiennej.
printf "%i" $LEVEL
0
UWAGA: Warto zauważyć, że w obu przypadkach, gdy nie przypisaliśmy wartości zmiennej i gdy przypisaliśmy wartość '0<” do zmiennej „LEVEL” daje 0. Chociaż dane wyjściowe są takie same w obu przypadkach, skrypt powłoki obsługuje obie deklaracje zmiennych w różny sposób.
Przypisz nową wartość do zmiennej.
LEVEL=121
Sprawdź zapisane dane w zmiennej.
printf "%i" $LEVEL
121
Usuń ustawienie zmiennej
Declare to polecenie BASH, które tworzy zmienną tylko po wykonaniu. Tak utworzona zmienna pozostaje w pamięci do momentu zatrzymania skryptu lub zniszczenia zmiennej.
unset LEVEL
Predefiniowane zmienne w BASH
BASH ma ponad 50 predefiniowanych zmiennych. Niektóre z tych zmiennych mają specjalne znaczenie przypisane BASHowi, np. zmienna RANDOM zwraca liczbę losową. Jeśli zostanie rozbrojona, a następnie zdefiniowana ponownie, pierwotna wartość zmiennej zostanie bezpowrotnie utracona. Dlatego zaleca się, aby nie używać żadnej zmiennej zdefiniowanej systemowo.
Oto lista kilku przydatnych zmiennych BASH.
- BASH — pełna nazwa ścieżki Basha.
- BASH_ENV — w skrypcie powłoki nazwa pliku profilu wykonanego przed uruchomieniem skryptu.
- BASH_VERSION — wersja Basha (na przykład 2.04.0(1)-release).
- KOLUMNY — liczba znaków w wierszu na wyświetlaczu (na przykład 80).
- NAZWA HOSTA — nazwa komputera. W niektórych wersjach Linuksa może to być nazwa komputera. W innych przypadkach może to być w pełni kwalifikowana nazwa domeny.
- HOSTTYPE — typ komputera.
- HOME — nazwa katalogu domowego.
- OSTYPE — nazwa systemu operacyjnego.
- PATH — lista oddzielonych dwukropkami ścieżek wyszukiwania, w których można znaleźć polecenie do wykonania.
- PPID — identyfikator procesu nadrzędnego powłoki.
- PROMPT_COMMAND — polecenie do wykonania przed ustawieniem podstawowego ciągu znaków zachęty PS1.
- PWD — bieżący katalog roboczy (ustawiony poleceniem cd).
- RANDOM — zwraca losową liczbę z zakresu od 0 do 32767 przy każdym odwołaniu.
- SHELL — preferowana powłoka; dla programów, które uruchamiają powłokę za Ciebie.
- TERM — typ emulacji terminala (na przykład konsola).
Zasada dzielenia wyrazów.
LEVEL=0
printf "%i" $LEVEL
0
AND
LEVEL=”0”
printf "%i" $LEVEL
0
W obu przypadkach wynik pozostaje taki sam. Jaka jest więc różnica w wynikach podczas korzystania z cytatu?
Sprawdźmy to samo z różnymi zmiennymi danymi.
LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found
bash: 2: command not found
bash: 3: command not found
bash: 4: command not found
bash: 5: command not found
printf "%i" $LEVEL
0
Nie wspominając już o tym, że dane wyjściowe nie są prawidłowe. BASH przyjmuje spację po „0” jako zakończenie i dlatego wartość zmiennej jest ustawiana na „0”. Teraz próbujemy użyć cudzysłowu dla zmiennych, jak poniżej.
LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
printf "%s" $LEVEL
0;1;2;3;4;5
Nadal wynik nie jest poprawny. BASH wziął wartości zmiennych i usunął wszystkie spacje pomiędzy nimi. Dlatego printf nie zinterpretował 0,1,2,3,4,5 jako odrębnych wartości. Jakie jest więc rozwiązanie?
printf "%s" "$LEVEL"
0 ; 1 ; 2 ; 3 ; 4 ; 5
Tak! Rozwiązaniem jest umieszczenie podstawienia zmiennej w cudzysłowie. Cytaty grupują znaki w powłoce i interpretują znaki specjalne w znaczący sposób.
Cytatów można używać jeden po drugim. Dobrym pomysłem jest umieszczenie podstawień zmiennych w cudzysłowie. Ponadto można go użyć do oddzielenia całego tekstu od cytatów. Oto przykład.
LEVEL=5
FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation."
printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”
Oddzielenie fragmentów cytowanego tekstu spacją spowoduje ten sam problem, co omówiono powyżej. Bash potraktuje białe znaki jako zakończenie. Innym sposobem podstawienia zmiennych jest.
LEVEL=5
FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation."
printf “%s” "$FLAG_MESSAGE"
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”
Pojedyncze cudzysłowy uniemożliwiają BASHowi drukowanie znaków specjalnych.
printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”
Ukośnik odwrotny (/)
Ukośnik odwrotny działa jak pojedynczy cudzysłów dla jednego znaku. Czy zastanawiałeś się, jak wydrukujesz („)?
printf "%c" "\""
Kiedy %q jest zgrupowane z printf, po każdym słowie pojawia się ukośnik odwrotny, aby zapewnić odstępy między wyrazami.
LEVEL=5
FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation."
printf “%q” "$FLAG_MESSAGE"
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”
To wszystko na teraz. Zawsze staramy się dostarczać naszym czytelnikom artykuły, które od czasu do czasu będą dla nich przydatne. Powyższy artykuł jest obszerny, dlatego reszta tematów wraz z przykładami zostanie opisana w następnym artykule, który będzie obejmował „Atrybuty zmiennej”, „Eksportowanie zmiennych” itp.
Do tego czasu Bądź na bieżąco i połącz się z linux-console.net. Nie zapomnij podzielić się z nami swoją cenną opinią w sekcji komentarzy poniżej.