Wyszukiwanie w witrynie

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.

  1. 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
  1. Nazwa zmiennej musi uzasadniać użycie zmiennej w skrypcie.
  2. Zdecydowanie zaleca się używanie tej samej nazwy zmiennej w całym programie.
  3. 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.

  1. BASH — pełna nazwa ścieżki Basha.
  2. BASH_ENV — w skrypcie powłoki nazwa pliku profilu wykonanego przed uruchomieniem skryptu.
  3. BASH_VERSION — wersja Basha (na przykład 2.04.0(1)-release).
  4. KOLUMNY — liczba znaków w wierszu na wyświetlaczu (na przykład 80).
  5. 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.
  6. HOSTTYPE — typ komputera.
  7. HOME — nazwa katalogu domowego.
  8. OSTYPE — nazwa systemu operacyjnego.
  9. PATH — lista oddzielonych dwukropkami ścieżek wyszukiwania, w których można znaleźć polecenie do wykonania.
  10. PPID — identyfikator procesu nadrzędnego powłoki.
  11. PROMPT_COMMAND — polecenie do wykonania przed ustawieniem podstawowego ciągu znaków zachęty PS1.
  12. PWD — bieżący katalog roboczy (ustawiony poleceniem cd).
  13. RANDOM — zwraca losową liczbę z zakresu od 0 do 32767 przy każdym odwołaniu.
  14. SHELL — preferowana powłoka; dla programów, które uruchamiają powłokę za Ciebie.
  15. 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.