Wyszukiwanie w witrynie

Zrozumienie i zapisanie „zmiennych linuksowych” w skryptach powłoki — część 10


Język skryptowy powłoki systemu Linux zawsze był i będzie gorącym tematem w przyszłości. Język skryptowy powłoki jest magiczny i tak łatwo jest stworzyć program w języku skryptowym, jak w każdym innym języku. Wymaga jednak dogłębnej wiedzy o tym, co robimy i jakiego rezultatu się oczekuje.

Wszystkie artykuły na temat skryptów powłoki, które napisaliśmy dla naszych czytelników, są bardzo cenione, łącznie z ostatnim „Wglądem w zmienne systemu Linux”. Rozszerzamy ostatni artykuł na nowy poziom.

Zmienne atrybuty

Każda zmienna w środowisku Linux ma pewne opcje, które nazywane są „atrybutami”. Te opcje lub atrybuty można włączyć i wyłączyć, jeśli jest to wymagane, w zależności od sytuacji, za pomocą polecenia „deklaruj ”.

Przykładem atrybutu zmiennej jest użycie przełącznika powiedz „-i”, który włącza atrybut liczby całkowitej dla odpowiedniej zmiennej. Nawet jeśli do przełącznika „-i” zostanie przekazana wartość nieliczbowa, nie wyświetli się komunikat o błędzie i nie zostanie wygenerowana wartość „0” jako interpretacja liczb całkowitych. Tutaj staje się to bardziej jasne na podstawie poniższego przykładu.

Zadeklaruj zmienną Integer, bill=121

avi@localhost:~$ declare -i bill=121

Wydrukuj wartość rachunku zmiennego.

avi@localhost:~$ printf "%d\n" "$bill" 

121

Niech wartość zmiennej będzie ciągiem znaków. Rachunek zmienny jest już zadeklarowany, nie ma potrzeby deklarowania go po raz drugi. Po prostu zmień wartość zmiennej jako.

avi@localhost:~$ bill=tecmint

Teraz ponownie wydrukuj wartość rachunku zmiennego.

avi@localhost:~$ printf "%d\n" "$bill" 

0

Zwróć uwagę na „0” w miejscu komunikatu o błędzie.

Teraz pytanie brzmi, jak poznać atrybuty już zadeklarowanych zmiennych?
avi@localhost:~$ declare -p bill 

declare -i bill="121"

Tutaj na ratunek przychodzi przełącznik -p (oznacza drukowanie).

Ponownie, co powinienem zrobić, aby wyłączyć atrybuty zmiennej?

Aby wyłączyć atrybuty zmiennej, wystarczy umieścić znak + (plus) tuż przed przełącznikiem. Tutaj jest to bardziej jasne na podstawie poniższego przykładu.

Wyłącz wyłącz atrybut całkowity dla powyższej zmiennej.

avi@localhost:~$ declare +i bill

Sprawdź wartość zmiennej.

avi@localhost:~$ printf "%d\n" "$bill" 

bash: printf: bill: invalid number
0

Teraz wydrukuj wartość zmiennej za pomocą ciągu przełącznika.

avi@localhost:~$ printf "%s\n" "$bill" 

tecmint

W powyższym przykładzie bash nie mógł ocenić wartości innej niż numeryczna jako błędu, jednak printf interpretuje, co może być liczbą, a co nie.

Zmienne tylko do odczytu

Być może słyszałeś o pamięci tylko do odczytu (ROM), ale czym jest zmienna tylko do odczytu? Czy ma to jakieś podobieństwo do ROM-u?

Cóż, zmienne tylko do odczytu, takie jak pamięć tylko do odczytu, to coś, czego wartości nie można zmienić po przypisaniu. Dlatego nazywa się to tylko do odczytu. Nie możesz pisać, edytować ani modyfikować nowej wartości tej zmiennej. Oto ilustracja na przykładzie.

Odznacz nazwę zmiennej tylko do odczytu (-r), której wartość to „linux-console.net ”.

avi@localhost:~$ declare -r name="linux-console.net"

Wydrukuj wartość powyższej zadeklarowanej zmiennej.

avi@localhost:~$ printf "%s\n" "$name" 

linux-console.net

Spróbuj zmienić wartość zmiennej.

avi@localhost:~$ declare -r name="Avishek" 

bash: declare: name: readonly variable

Jak omówiono powyżej, atrybuty zmiennej tylko do odczytu można zmienić za pomocą znaku „+”.

Eksportowanie zmiennych w systemie Linux

Wszystkie zmienne powłoki zadeklarowane w skrypcie powłoki są dostępne do momentu uruchomienia skryptu. Poza skryptem zmienna ze skryptu nie istnieje. Proces udostępniania zmiennych poza skryptem nazywa się eksportowaniem zmiennych.

Zmienną można wyeksportować poza powłokę za pomocą przełącznika deklaracja -x (eksport), który potwierdza powłoce to, co chcesz wyeksportować. Przełącznik deklaracji eksportu może być używany jako.

avi@localhost:~$ declare -x variable=”Constant_Value”

Wszystkie zmiany dokonane w zmiennej podczas działania skryptu zostaną utracone, gdy zmienna zostanie wyeksportowana poza skrypt. Eksportowanie zmiennej jest bardzo ważne w skryptach powłoki.

Chcemy mieć zmienną, która powinna być tylko do odczytu i dostępna poza skryptem, musimy jednocześnie użyć przełącznika -r i przełącznika -x.

avi@localhost:~$ declare -rx variable=”Constant_Value”

Zmienne środowiska

Zmienne współdzielone pomiędzy programem i programem, który je wykonuje. Zmienne środowiskowe można eksportować, ale nie można do nich przypisywać atrybutów.

Zrozumienie powyższej teorii w praktyce. Tutaj mamy dwa skrypty 0.sh i 1.sh.

0.sh
#!/bin/bash 
declare -rx name=Tecmint 
bash 0.sh 
exit 0

A drugi skrypt jest.

1.sh
#!/bin/bash 
printf "%s\n" "$name" 
name=linux-console.net 
printf "%s\n" "$name"
exit 0

Tutaj dzieje się tak, że zmienna (nazwa) jest deklarowana jako tylko do odczytu i eksportowana, a zaraz po tym wywoływany jest drugi skrypt.

Drugi skrypt właśnie wydrukował zmienną z pierwszego skryptu, który został wyeksportowany w pierwszej instrukcji printf. W drugiej instrukcji printf pokazuje nową wartość przypisaną do zmiennej „nazwa”.

Nie musisz się martwić, że zmienna była tylko do odczytu, jak można ją ponownie przypisać. Czy nie pamiętasz, że „Wszystkie zmiany dokonane w zmiennej podczas działania skryptu zostaną utracone, gdy zmienna zostanie wyeksportowana poza skrypt. ”

Bibliografia

Polecenie deklaruj zezwala na użycie wszystkich poniższych przełączników wraz z ich kombinacją.

  1. -a: Deklaruje tablicę.
  2. -f: Funkcja wyświetlania i definicja.
  3. -F: Wyświetl nazwę funkcji.
  4. -r: zadeklaruj zmienną jako tylko do odczytu.
  5. -x: zadeklaruj zmienną jako nadającą się do eksportu.
  6. -I: Zadeklaruj zmienną jako liczbę całkowitą.

To wszystko na teraz. W następnym artykule omówimy sposoby zastępowania zmiennych za pomocą polecenia „eval” oraz zmiennych już zdefiniowanych w bashu przed zamknięciem tego tematu. Mam nadzieję, że podoba wam się podróż do głębszego pisania skryptów. Do tego czasu bądź na bieżąco i połącz się z linux-console.net.