Praca ze zmiennymi w systemie Linux

Wiele ważnych wartości jest przechowywanych w systemach Linux w tym, co nazywamy „zmiennymi”, ale w rzeczywistości istnieje kilka rodzajów zmiennych i kilka interesujących poleceń, które mogą pomóc ci z nimi pracować. W poprzednim poście sprawdziliśmy zmienne środowiskowe i ich definicje. W tym poście przyjrzymy się zmiennym używanym w wierszu poleceń i skryptach.

Zmienne użytkownika

Chociaż dość łatwo jest ustawić zmienną w linii poleceń, istnieje kilka interesujących sztuczek. Aby skonfigurować zmienną, wystarczy coś takiego:

$ myvar = 11 $ myvar2 = "jedenaście" 

Aby wyświetlić wartości, po prostu wykonaj następujące czynności:

$ echo $ myvar 11 $ echo $ myvar2 jedenaście 

Możesz także pracować ze swoimi zmiennymi. Na przykład, aby zwiększyć zmienną numeryczną, możesz użyć dowolnego z następujących poleceń:

$ myvar = $ ((myvar + 1)) $ echo $ myvar 12 $ ((myvar = myvar + 1)) $ echo $ myvar 13 $ ((myvar + = 1)) $ echo $ myvar 14 $ ((myvar ++)) $ echo $ myvar 15 $ let "myvar = myvar + 1" $ echo $ myvar 16 $ let "myvar + = 1" $ echo $ myvar 17 $ let "myvar ++" $ echo $ myvar 18 

W przypadku niektórych z nich możesz dodać więcej niż 1 do wartości zmiennej. Na przykład:

$ myvar0 = 0 $ ((myvar0 ++)) $ echo $ myvar0 1 $ ((myvar0 + = 10)) $ echo $ myvar0 11 

Przy tych wszystkich wyborach prawdopodobnie znajdziesz przynajmniej taki, który jest łatwy do zapamiętania i wygodny w użyciu.

Możesz też nieoprawny zmienna - w zasadzie jej niezdefiniowanie.

$ unset myvar $ echo $ myvar 

Inną interesującą opcją jest to, że możesz ustawić zmienną i ją wprowadzić tylko czytać. Innymi słowy, raz ustawiona na „tylko do odczytu”, jej wartość nie może być zmieniona (przynajmniej nie bez pewnych bardzo skomplikowanych kreacji w linii poleceń). Oznacza to, że nie można go również rozbroić.

$ readonly myvar3 = 1 $ echo $ myvar3 1 $ ((myvar3 ++)) -bash: myvar3: zmienna tylko do odczytu $ unset myvar3 -bash: unset: myvar3: nie można rozbroić: zmienna tylko do odczytu 

Możesz użyć dowolnej z tych opcji ustawiania i zwiększania wartości do przypisywania i manipulowania zmiennymi w skryptach, ale jest też kilka bardzo przydatnych zmienne wewnętrzne do pracy w skryptach. Pamiętaj, że nie można ponownie przypisać ich wartości ani zwiększyć ich wartości.

Zmienne wewnętrzne

Istnieje wiele zmiennych, których można używać w skryptach do oceny argumentów i wyświetlania informacji o samym skrypcie.

  • 1, 2, 3, 3 itd. Reprezentują pierwszy, drugi, trzeci itd. Argumenty skryptu.
  • $ # reprezentuje liczbę argumentów.
  • $ * reprezentuje ciąg argumentów.
  • $ 0 reprezentuje nazwę samego skryptu.
  • $? reprezentuje kod powrotu poprzednio uruchomionego polecenia (0 = sukces).
  • $$ pokazuje identyfikator procesu dla skryptu.
  • $ PPID pokazuje identyfikator procesu dla twojej powłoki (proces macierzysty dla skryptu).

Niektóre z tych zmiennych działają również w wierszu poleceń, ale pokazują powiązane informacje:

  • 0 USD pokazuje nazwę używanej powłoki (np. -Bash).
  • $$ pokazuje identyfikator procesu dla twojej powłoki.
  • $ PPID pokazuje identyfikator procesu macierzystego procesu twojej powłoki (dla mnie jest to sshd).

Jeśli wrzucimy wszystkie te zmienne do skryptu, aby zobaczyć wyniki, możemy to zrobić:

#! / bin / bash echo 0 $ echo 1 $ echo 2 $ echo $ # echo $ * echo $? echo $$ echo $ PPID 

Kiedy wywołamy ten skrypt, zobaczymy coś takiego:

$ tryme jeden dwa trzy / home / shs / ​​bin / tryme <== script name one <== first argument two <== second argument 3 <== number of arguments one two three <== all arguments 0 <== return code from previous echo command 10410 <== script's process ID 10109 <== parent process's ID 

Jeśli sprawdzimy identyfikator procesu powłoki po zakończeniu działania skryptu, możemy zobaczyć, że jest on zgodny z PPID wyświetlanym w skrypcie:

$ echo $$ 10109 <== shell's process ID 

Oczywiście bardziej prawdopodobne jest, że użyjemy tych zmiennych w znacznie bardziej użyteczny sposób niż po prostu wyświetlając ich wartości. Sprawdźmy, w jaki sposób możemy to zrobić.

Sprawdzanie, czy podano argumenty:

jeśli [$ # == 0]; następnie echo „$ 0 nazwa pliku” wyjście 1 fi 

Sprawdzanie, czy działa dany proces:

ps -ef | grep apache2> / dev / null if [$? ! = 0]; wtedy echo Apache nie uruchamia wyjścia fi 

Sprawdzanie, czy plik istnieje, zanim spróbujesz uzyskać do niego dostęp:

jeśli [$ # -lt 2]; następnie powtórz „Zastosowanie: $ 0 wierszy nazwa pliku” wyjdź z 1 fi, jeśli [! -f 2 USD]; następnie echo „Błąd: Nie znaleziono pliku 2 $” Wyjdź 2, w przeciwnym razie głowa - 1 $ 2 $ fi 

W tym małym skrypcie sprawdzamy, czy podano poprawną liczbę argumentów, czy pierwszy argument jest liczbowy i czy drugi argument jest plikiem istniejącym.

#! / bin / bash if [$ # -lt 2]; następnie powtórz „Zastosowanie: $ 0 wierszy nazwa pliku” wyjdź z 1 fi, jeśli [[$ 1! = [0-9] *]]; następnie powtórz „Błąd: 1 $ nie jest liczbowy”, wyjdź z 2 fi, jeśli [! -f 2 USD]; następnie echo „Błąd: Nie znaleziono pliku 2 $” Wyjdź 3, w przeciwnym razie wyświetl echo nagłówka pliku - 1 $ 2 $ fi 

Zmienianie nazw zmiennych

Podczas pisania skomplikowanego skryptu często przydatne jest przypisywanie nazw argumentom skryptu, zamiast dalszego określania ich jako 1 $, 2 $ i tak dalej. W 35. linii ktoś czytający twój skrypt mógł zapomnieć, co oznacza 2 USD. Ta osoba będzie o wiele łatwiejsza, jeśli przypiszesz ważną wartość parametru do $ filename lub $ numlines.

#! / bin / bash if [$ # -lt 2]; następnie echo „Użycie: $ 0 wierszy nazwa pliku” wyjście 1 else numlines = $ 1 nazwa pliku = 2 $ fi, jeśli [[$ numlines! = [0-9] *]]; następnie powtórz „Błąd: $ numlines nie jest numeryczny”, wyjdź 2 fi, jeśli [! -f $ nazwa pliku]; następnie echo „Błąd: Nie znaleziono pliku $ nazwa pliku” wyjście 3 inne echo góra pliku - $ numlines $ nazwa pliku fi 

Oczywiście w tym przykładowym skrypcie nie ma nic więcej niż uruchomienie polecenia head, aby wyświetlić górne X wierszy w pliku, ale ma on na celu pokazanie, w jaki sposób można użyć parametrów wewnętrznych w skryptach, aby upewnić się, że skrypt działa poprawnie lub nie działa przynajmniej trochę jasności.

[Obejrzyj dwuminutowe porady Sandry Henry-Stocker dotyczące systemu Linux, aby dowiedzieć się, jak opanować wiele poleceń systemu Linux] Dołącz do społeczności Network World na Facebooku i LinkedIn, aby komentować najważniejsze tematy.