logo

Jak przekazywać i analizować argumenty i parametry skryptu Linux Bash

Analizowanie i przekazywanie argumentów do skryptów Bash/skryptów powłoki jest dość podobne do sposobu, w jaki przekazujemy argumenty do funkcji wewnątrz skryptów Bash. Przyjrzymy się faktycznemu procesowi przekazywania argumentów do skryptu, a także przyjrzymy się sposobowi uzyskania dostępu do tych argumentów wewnątrz skryptu.

Przekazywanie argumentów przed uruchomieniem

Możemy przekazywać parametry tuż po nazwie skryptu podczas uruchamiania polecenia interpretera bash. Do pliku można przekazywać parametry lub argumenty. Wystarczy polecenie normalnego uruchomienia skryptu poprzez dodanie wartości parametrów bezpośrednio do skryptu. Każdy parametr jest wartością oddzieloną spacjami, którą należy przekazać do skryptu powłoki.



bash scriptname.sh>

Powyższe polecenie po prostu uruchomi skrypt bez przekazywania parametrów.

Natomiast poniższe polecenie przekaże argumenty do skryptu.

bash scriptname.sh parameter1 parameter2 parameter3 nth-parameter>

Uruchamianie skryptu bash z przekazanymi parametrami



Powyższy zrzut ekranu przedstawia parametry przekazane do skryptu, jak to zrobimy, co wyjaśnimy w następnej sekcji. Ale teraz widzimy, że przekazaliśmy parametry spoza skryptu, używając zmiennych środowiskowych bash. Możesz nawet używać ciągów znaków i innych typów danych, ale uważaj na wszelkie białe znaki. Białe znaki sprawią, że zmienna stanie się osobnym parametrem. Dlatego szczególnie w przypadku ciągów znaków uważaj, aby ściśle otoczyć je cudzysłowami.

Wykrywanie argumentów wiersza poleceń

Teraz zobaczymy, jak uzyskać dostęp do tych parametrów w skrypcie. Użyjemy liczby parametrów przekazanych w kolejności, tj. dla pierwszych przekazanych parametrów przeanalizujemy (uzyskamy dostęp) do parametru, używając jako zmiennej. Pierwszy parametr jest przechowywany w zmiennej . Co więcej, możesz przypisać tę zmienną do dowolnej innej zmiennej zdefiniowanej przez użytkownika. W przypadku przekazanego n-tego parametru możesz użyć $n, aby uzyskać dostęp do tego konkretnego parametru. Tutaj nazwa zmiennej zaczyna się od 1, ponieważ nazwa pliku/nazwa skryptu jest parametrem 0. Jeśli masz więcej niż 9 parametrów, pamiętaj o użyciu { } wokół liczby, ponieważ bez nawiasów bash zobaczy tylko 10 $ jako 1 $ i wykluczy 0, więc użyj i tak dalej zamiast po prostu 10 $.

#!/bin/bash echo '1st parameter =  ' echo '2nd Parameter =  '>

Powyższy skrypt może uzyskać dostęp do parametrów z wiersza poleceń/powłoki przy użyciu parametrów pozycyjnych, którymi są 1, 2, 3 i tak dalej.



Dostęp do argumentów ze skryptu.

Jak widać, użyliśmy {}, aby uzyskać dostęp do numerów zmiennych parametrów od 10 wzwyż. Skrypt może być używany w pętlach i pętlach while do iteracji po parametrach, ale omówimy to w dalszych sekcjach.

Przypisz podane argumenty do zmiennej Bash

Możemy go także przypisać do innych zmiennych niestandardowych, aby uczynić skrypt bardziej dynamicznym i dopasować go do potrzeb. Chociaż powyższy skrypt po uruchomieniu wyświetli tylko dwa parametry, z pewnością możesz uzyskać dostęp do większej liczby parametrów, używając zmiennej jako kolejności parametrów w liczbach. Skrypt może uzyskać dostęp do zmiennych pozycyjnych z wiersza poleceń i używać ich w wymaganych miejscach, gdziekolwiek jest to potrzebne w skrypcie.

#!/bin/bash a= b= p=$(($a*$b)) echo 'The product of $a and $b = $p'>

Przypisz podane argumenty do zmiennej Bash

Powyższy skrypt uzyskuje dostęp do parametrów pozycyjnych, tj. 1 $ i 2 $ przekazanych do skryptu i przechowuje zmienne zdefiniowane przez użytkownika, aby uzyskać do nich później dostęp i odpowiednio je zmodyfikować. Dostęp do większej liczby parametrów możemy również uzyskać za pomocą metod iteracyjnych, co zobaczymy w nadchodzących sekcjach.

Mamy także możliwość sprawdzenia, czy przekazane zostały parametry NULL lub puste, przy użyciu flag -z lub -n. Na tej podstawie możemy sprawdzić, czy parametry zostały przekazane, czy nie.

#!/bin/bash if [[ -z  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

Sprawdzanie, czy parametry pozycyjne zostały przekazane, czy nie.

Za pomocą tego skryptu możemy wykryć, czy przekazano jakiekolwiek parametry pozycyjne, czy też nie przekazano nic. Flaga -z sprawdza, czy w BASH występują jakiekolwiek zmienne NULL lub niezainicjowane. Flaga -z zwraca wartość true, jeśli przekazana zmienna ma wartość NULL lub jest niezainicjowana. W związku z tym możemy skorzystać z podstawowych instrukcji If-else w celu wykrycia przekazanych parametrów.

Możemy również użyć flagi -n, która zwraca wartość true, jeśli nie zostaną przekazane żadne parametry, więc musimy skorzystać z ! aby odwrócić ten stan.

nasiona vs zarodniki

Na przykład:

#!/bin/bash if [[ ! -n  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

Ten skrypt również da taki sam wynik, ale używamy flagi -n zamiast -z.

Odczytywanie wielu argumentów za pomocą pętli For lub While

Możemy użyć zmiennej @, aby uzyskać dostęp do każdego parametru przekazanego do skryptu za pomocą wiersza poleceń. Jest to specjalna zmienna przechowująca tablicę zmiennych w języku BASH. W tym przypadku używamy go samego, więc zawiera tablicę przekazanych parametrów pozycyjnych. Możemy go używać do iteracji po parametrach przekazywanych za pomocą pętli lub pętli while.

#!/bin/bash for i in $@ do echo -e '$i
' done>

Używanie pętli i zmiennej @ w celu uzyskania dostępu do parametrów jako elementów tablicy.

Użyliśmy pętli for opartej na zakresie do iteracji, aż w tablicy @ pojawią się elementy. Po prostu iterujemy po tablicy i drukujemy element. Możemy po prostu go przypisać, zmodyfikować wartości i wprowadzić wymagane zmiany w parametrach i argumentach, aby osiągnąć pożądany wynik ze skryptu.

LUB

Możemy także wydrukować argumenty za pomocą pętli while i zmiennych środowiskowych BASH.

#!/bin/bash i=$(($#-1)) while [ $i -ge 0 ]; do echo ${BASH_ARGV[$i]} i=$((i-1)) done>

Użycie pętli while do iteracji po przekazanych parametrach.

Używamy zmiennej „ # ', ponieważ przechowuje liczbę przekazanych parametrów. Inicjujemy liczbę parametrów i usuwamy jeden, ponieważ będziemy używać tablicy do iteracji po niej. Zatem jak zwykle indeks tablicy zaczyna się od 0. Ponieważ tablica jest inicjowana od ostatniego przekazanego elementu lub parametru, musimy zmniejszać licznik aż do 0, aby wydrukować każdy parametr w kolejności, w jakiej był przekazywany. Po prostu używamy tablicy BASH_ARGV, aby uzyskać dostęp do parametrów i wydrukować ich wartość. Ponadto przy każdej iteracji zmniejszamy wartość i- iteratora lub licznika o jeden, używając arytmetycznych podwójnych nawiasów klamrowych. Na tej podstawie po prostu wypisujemy każdy parametr przekazany do skryptu za pomocą pętli while, jak pokazano na zrzucie ekranu wyjściowego.

Odczytywanie nazw parametrów

Używanie getopts do analizowania argumentów i parametrów

Możemy użyć programu/polecenie getopts do analizy argumentów przekazanych do skryptu w wierszu poleceń/terminalu za pomocą pętli i instrukcji przełączania.

#!/bin/bash while getopts n:c: option do case '${option}' in n)nation=${OPTARG};; c)code=${OPTARG};; esac done echo 'Nation : $nation' echo 'code : $code'>

Używanie getopts do analizowania argumentów i parametrów

Używając getopts, możemy przypisać argumenty/parametry pozycyjne z linii poleceń bezpośrednio do zmiennych bash. Dzięki temu możemy ładnie i systematycznie zarządzać parametrami. W powyższym skrypcie użyliśmy dwóch argumentów do przechowywania zmiennych bash przy użyciu składni getopts, natomiast pętle i instrukcje typu switch-case.

alternatywa dla xamppa

Drukowanie wartości wszystkich argumentów

Możemy wydrukować argumenty przekazane do skryptu za pomocą prostej, potężnej zmiennej „@”, która przechowuje wszystkie przekazane parametry.

#!/bin/bash echo 'The arguments passed in are : $@'>

Drukowanie wartości wszystkich argumentów

Dostęp do liczby przekazanych parametrów

Możemy również użyć zmiennej „#”, aby uzyskać dostęp do liczby parametrów przekazanych z wiersza poleceń. Zmienna # zasadniczo zawiera liczbę parametrów/argumentów przekazywanych do skryptu.

#!/bin/bash echo 'The number of arguments passed in are : $#'>

Dostęp do liczby przekazanych parametrów

Poniżej przedstawiono proces i specyfikację przekazywania i analizowania zmiennych w skrypcie bash. Logika przesuwania i modyfikowania zmiennych leży w rękach użytkownika. To była tylko demonstracja przekazywania i analizowania argumentów z wiersza poleceń do skryptu, aby uczynić je bardziej dynamicznymi.