Bash Specjalne zmienne (0 USD, $?, $#, [e -mail chroniony]</a>, $$, $*)

Bash Specjalne zmienne (0 USD, $?, $#, [e -mail chroniony]</a>, $$, $*)

Bash to potężna skorupa, która zapewnia szeroką gamę specjalnych zmiennych, których można użyć do manipulowania i kontrolowania zachowania skryptów. Zmienne te dostarczają istotnych informacji o środowisku, w którym działa skrypt, w tym argumenty wiersza poleceń, bieżący identyfikator procesu i status ostatniego wykonanego polecenia.

W tym artykule zapewniamy dogłębny przewodnik po wszystkich zmiennych specjalnych Bash, w tym przykłady ich użycia i wspólnych pułapek, których należy unikać.

  1. '0 USD' - Nazwa wykonywanego skryptu.
  2. '1- 9 USD' - Pierwsze dziewięć argumentów wiersza poleceń.
  3. '$#' - Liczba argumentów wiersza poleceń.
  4. '$*' - Wszystkie argumenty wiersza poleceń jako pojedynczy ciąg.
  5. '[chroniony e -mail]' - Wszystkie argumenty wiersza poleceń jako tablica.
  6. '$?' - Status wyjścia ostatniego wykonanego polecenia.
  7. '$$' - Identyfikator procesu bieżącej powłoki.
  8. '$!' - Identyfikator procesu ostatniego polecenia tła.

Omówmy szczegółowo specjalne zmienne z przykładami.

0 USD - Nazwa wykonywanego skryptu

W Bash, 0 USD jest specjalnym parametrem, który zawiera nazwę skryptu lub powłoki, która jest obecnie wykonywana. Jest również znany jako „nazwa” lub „argument zerowy” skryptu.

Załóżmy na przykład, że masz skrypt o nazwie „Myscript.cii" że chcesz uciec z dowolnego katalogu. W takim przypadku możesz użyć zmiennej 0 USD, aby określić nazwę wykonywanego skryptu:

#!/bin/bash echo „Obecny uruchomiony skrypt to: 0 USD”
12#!/bin/bashecho „Obecny uruchomiony skrypt to: 0 $”

Możesz także określić katalog, w którym znajduje się skrypt, a następnie użyć tego katalogu, aby zlokalizować dowolne pliki, których potrzebuje skrypt.

#!/bin/bash script_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "Skrypt działa od $ script_dir"
123#!/bin/bashscript_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "Skrypt działa od $ script_dir"

1 USD, 2 USD,…, 9 USD - Argumenty wiersza poleceń

1 USD, 2 USD,… 9 USD Zmienne zawierają pierwsze dziewięć argumentów wiersza poleceń przekazanych do skryptu. Te zmienne są przydatne do tworzenia skryptów powłoki, które akceptują dane wejściowe użytkownika.

Załóżmy na przykład, że masz skrypt o nazwie "powitać.cii" To wymaga nazwy jako pierwszego argumentu wiersza poleceń. W takim przypadku możesz użyć 1 USD zmienna do pobrania nazwy, a następnie użycia jej w wyjściu skryptu.

#!/bin/bash echo "Hello, 1 $!"
12#!/bin/bashecho "Hello, 1 $!"

Jeśli skrypt musi uzyskać dostęp do więcej niż dziewięć argumentów wiersza poleceń, $ 10, $ 11,…, $ n Do ich odzyskania można użyć zmiennych. Te zmienne można używać z poleceniem Shift do przetwarzania argumentów wiersza polecenia w partiach. Upewnij się, że zmienna jest zamknięta wsporniki.

$# - liczba argumentów wiersza poleceń

$# Zmienna zawiera liczbę argumentów wiersza poleceń przekazanych do skryptu. Ta zmienna jest przydatna do tworzenia skryptów powłoki, które sprawdzają dane wejściowe użytkownika.

Załóżmy na przykład, że masz skrypt o nazwie "uprawomocnić.cii”To wymaga dwóch argumentów wiersza poleceń. W takim przypadku możesz użyć zmiennej $#, aby upewnić się, że dostarczana jest prawidłowa liczba argumentów.

#!/bin/bash, jeśli [[$# -NE 2]] Następnie echo „Zastosowanie: Sprawdź sprawdź.sh [nazwa użytkownika] [hasło] "exit 1 fi
123456#!/bin/bashif [[$# -NE 2]] następnie echo „Zastosowanie: Sprawdź sprawdź.sh [nazwa użytkownika] [hasło] "exit 1fi

$* - Wszystkie argumenty wiersza poleceń jako pojedynczy ciąg

$* Zmienna zawiera wszystkie argumenty wiersza poleceń przekazywane do skryptu jako pojedynczy ciąg. Ta zmienna jest przydatna do tworzenia skryptów powłoki, które wymagają manipulowania całym ciągiem wiersza poleceń.

Załóżmy na przykład, że masz skrypt o nazwie "dołączyć.cii" który łączy dwa ciągi dostarczone jako argumenty wiersza poleceń. W takim przypadku możesz użyć $* zmienne do połączenia strun.

#!/bin/bash dołączył = "$*
12#!/bin/bashjoined = "$*

[e -mail chroniony] - wszystkie argumenty wiersza poleceń jako tablica

[chroniony e -mail] Zmienna zawiera wszystkie argumenty wiersza poleceń przekazywane do skryptu jako tablica. Ta zmienna jest przydatna do tworzenia skryptów powłoki, które muszą manipulować indywidualnymi argumentami wiersza poleceń.

Załóżmy na przykład, że masz skrypt o nazwie "lista.cii" który wymienia wszystkie pliki w katalogu dostarczonym jako argument wiersza poleceń. W takim przypadku możesz użyć [chroniony e -mail] zmienne do iterowania każdej nazwy katalogu i wymieniaj pliki w tym katalogu.

#!/bin/bash dla katalogu w plikach „$@” echo ”w katalogu $:„ ls -l $ Directory dise
123456#!/bin/bashfor Directory w „[e -mail chroniony]„ Do echo ”wymienia pliki w katalogu $:„ LS -l $ Directorydone

$? - Status wyjścia ostatniego wykonanego polecenia

$? Zmienna zawiera status wyjścia ostatniego wykonanego polecenia. Ta zmienna jest pomocna w tworzeniu skonfliktów, które muszą obsługiwać błędy lub podejmować różne działania w zależności od sukcesu lub porażki polecenia.

Załóżmy na przykład, że masz skrypt o nazwie „Utwórz plik.cii" który tworzy plik i zwraca status wyjścia wskazujący sukces lub porażkę. W takim przypadku możesz użyć $? zmienna do sprawdzenia statusu wyjścia i podjęcia odpowiednich działań.

#!/bin/bash touch myfile.txt, jeśli [[$? -eq 0]] Następnie echo „Plik utworzony pomyślnie” Else Echo „Błąd tworzenia pliku” FI
12345678#!/bin/bashtouch myfile.txtif [[$? -eq 0]] Następnie echo „Plik utworzony pomyślnie” Else Echo „Błąd tworzenia pliku” FI

$$ - identyfikator procesu bieżącej powłoki

$$ Zmienna zawiera identyfikator procesu bieżącego skryptu. Ta zmienna jest przydatna do tworzenia skryptów powłoki, które muszą zarządzać wieloma procesami lub tworzyć unikalne nazwy plików.

Załóżmy na przykład, że masz skrypt o nazwie "dziennik.cii" który rejestruje informacje do pliku o unikalnej nazwie na podstawie identyfikatora procesu. W takim przypadku możesz użyć $$ zmienna do generowania unikalnej nazwy pliku.

#!/bin/bash log_file = "log _ $$.txt „echo” logowanie do pliku $ log_file ”
123#!/bin/bashlog_file = "log _ $$.txt „echo” logowanie do pliku $ log_file ”

$! - Identyfikator procesu ostatniego polecenia tła

$! Zmienna zawiera identyfikator procesu ostatniego polecenia tła wykonanego przez skrypt. Ta zmienna jest przydatna do tworzenia skryptów powłoki, które muszą zarządzać wieloma procesami lub monitorować postępy długotrwałych poleceń.

Załóżmy na przykład, że masz skrypt o nazwie "tło.cii" który uruchamia polecenie w tle i rejestruje jego postęp. W takim przypadku możesz użyć $! zmienna do monitorowania postępu polecenia.

#!/bin/bash mycommand & pid = $! podczas gdy ps -p $ pid>/dev/null; Czy polecenie Echo „Polecenie wciąż uruchamia„ Sleep 1 Done Echo ”zakończyło się”
12345678#!/bin/bashmycommand & pid = $!podczas gdy ps -p $ pid>/dev/null; czy Echo „Polecenie wciąż działa„ Sleep 1doneecho ”Command skończyło się”

Wniosek

Podsumowując, BASH Special zmienne dostarczają istotnych informacji o środowisku, w którym działa skrypt. Te zmienne umożliwiają tworzenie bardziej elastycznych, solidnych i odpornych na błę. Opanowując wykorzystanie tych zmiennych, możesz przenieść swoje umiejętności skorupy na wyższy poziom.