Jak wykonywać polecenia z poziomu skryptu powłoki

How Execute Commands From Within Shell Script



W bash, wykonywanie poleceń ze skryptu powłoki może początkowo wydawać się nieco onieśmielające i może wymagać skoku wiary. W końcu polecenia wykonywane w skrypcie bash nie są interaktywne. Tutaj położymy podstawy do wykonywania poleceń z poziomu skryptu powłoki, odpowiadając na następujące pytania dotyczące poleceń: Skąd one pochodzą? Czym oni są? Jak używamy ich w skrypcie?

Skąd pochodzą polecenia?

Komendy w bashu pochodzą z jednej z następujących kategorii:







Bash sam (zobacz wbudowane)

Bash zawiera własny zestaw poleceń, które umożliwiają dostęp do wbudowanych funkcji, takich jak deklarowanie tablic, odczytywanie wierszy z pliku i inne funkcje wbudowane w bash. Nazywamy polecenia tej kategorii, poleceniami wbudowanymi bash lub w skrócie poleceniami wbudowanymi.



Pliki wykonywalne w Twoim środowisku (zobacz polecenia zewnętrzne)

Domyślnie bash domyślnie dziedziczy pewne zmienne. Jest to obserwowane w przypadku zmiennej PATH zawierającej lokalizacje plików wykonywalnych, które są przywoływane jako polecenia zewnętrzne w bash. Oznacza to, że jeśli kędzior polecenie znajduje się w twojej ścieżce, może być wykonane z poziomu skryptu basha w taki sam sposób, jak w trybie interaktywnym. Nazywamy polecenia tej kategorii, poleceniami zewnętrznymi lub w skrócie poleceniami.



Funkcja zdefiniowana przez użytkownika (patrz funkcje)

Przed wykonaniem poleceń zewnętrznych i poleceń wbudowanych, bash sprawdza, czy funkcja jest zdefiniowana. Jeśli tak, funkcja jest wykonywana jako polecenie. Jeśli tak się nie stanie, postępuje w dół kolejności poleceń. Aby wykonać funkcje zdefiniowane poza skryptem, muszą być zadeklarowane z atrybutem -x; w przeciwnym razie mogą być uwzględnione przy użyciu . Komenda. Nazywamy polecenia tej kategorii funkcjami zdefiniowanymi przez użytkownika lub funkcjami w skrócie.





Czym są polecenia

Polecenie to dowolne słowo, które ma być traktowane jako pojedynczy punkt wejścia programu w środowisku powłoki. W przypadku wykonania polecenia, samo polecenie i opcjonalne argumenty są przekazywane jako parametry pozycyjne, ${0}, ${1}, ${2}, … Zerowy parametr pozycyjny (${0}) wyznacza samo polecenie i jest niezmienione w kontekście. Oznacza to, że w przeciwieństwie do parametrów pozycyjnych w funkcjach, ${1}, ${2}, …, które mogą się zmieniać w zależności od kontekstu, ${0} pozostaje niezmienione między wywołaniami funkcji.

Polecenia mają zakres w zależności od lokalizacji deklaracji i atrybutów przypisanych jako globalne, wbudowane w bash lub lokalne w programie basha.



Oto lista typów poleceń, które należy znać.

Wbudowane polecenia

Są to pierwszorzędni obywatele wszechświata basha, w tym znaki takie jak „.” „:” „[” „]” i zastrzeżone słowa, takie jak deklaracja w bash . Liczysz na to, że te polecenia, zawarte na liście wbudowanych poleceń bash, będą dostępne do użycia w skrypcie bash.

W zależności od oznaczenia i numeru wersji interpretera bash niektóre polecenia mogą być niedostępne.

Polecenia zewnętrzne

Polecenia zewnętrzne to pliki wykonywalne dostępne poza skryptem basha, takie jak curl. W przeciwieństwie do funkcji, polecenia zewnętrzne nie są przechowywane jako zmienne.

Im niższy priorytet typu polecenia, tym później polecenie może być interpretowane. Polecenia zewnętrzne mają najniższy priorytet w bash. To jest przed uruchomieniem zewnętrznego polecenia, interpreter bash będzie szukał funkcji, a następnie wbudowanych, a na koniec spróbuje sprawdzić, czy polecenie istnieje zewnętrznie. Jeśli nie, powinieneś zobaczyć następujący błąd.

bash: nieznane-polecenie:Komendanie znaleziono

W skrypcie basha funkcje mogą przesłonić zachowanie poleceń zewnętrznych, jeśli mają tę samą nazwę, jak widzieliśmy wcześniej w przykładach curl basha . Poniżej znajduje się przykład niestandardowego polecenia zewnętrznego używającego funkcji.

kędzior() {
Komenda ${FUNCNAME}...
}

Działa to, ponieważ funkcje mają wyższy priorytet niż polecenia zewnętrzne, a nawet wbudowane polecenia bash. Ograniczeniem są dozwolone znaki w nazwie funkcji.

Zwróć uwagę, że powyższy przykład można wykonać za pomocą aliasu w następujący sposób.

Alias kędzior= ’
{
zwijanie ...
}
'

W przypadku aliasów typ polecenia może się różnić w zależności od kontekstu w wykonaniu, natomiast w przypadku niestandardowych poleceń zewnętrznych wykorzystujących metodę funkcji punktem wejścia jest zawsze funkcja.

Funkcje

Funkcje rządzą w bashu. Przed zapoznaniem się z poleceniami wbudowanymi i poleceniami zewnętrznymi bash sprawdza, czy funkcja zdefiniowana przez nazwę funkcji kandydującej, pierwsze słowo pojawiające się w wierszu lub po ; znak oznaczający koniec wiersza poleceń. Jedynym wyjątkiem są zmienne bash napisane wielkimi literami, takie jak ${FUNCNAME}.

Alias() { NAZWA FUNKCJI=asdf ;wyrzucił $ {@ ,,};}
Alias kędzior='TEST ZWIJANIA ALIAS' #?

Proste polecenia

Proste polecenia są zdefiniowane na stronach podręcznika bash jako słowo, po którym następują opcjonalne argumenty. W kontekście proste polecenie może być albo poleceniem wbudowanym, zewnętrznym albo funkcją.

Jak wykonywać polecenia z poziomu skryptu bash

Teraz, gdy wiemy, jakie typy poleceń są dostępne, możemy rozwinąć, jak używać ich w swoich skryptach. Najpierw musimy wiedzieć, jak działa pierwszeństwo poleceń w bash.

Oto kilka sposobów kontrolowania pierwszeństwa w skrypcie bash.

Niech bash zadecyduje

nazwa_polecenia

W większości, szczególnie na początku, pozwalamy bashowi po prostu zdecydować, którego polecenia użyć. Zdarzają się jednak przypadki, w których Twoja intencja może nie zostać poprawnie zinterpretowana przez bash. Tak jest w przypadku, gdy nazwy funkcji i polecenia zewnętrzne lub wbudowane nakładają się.

Wykonaj polecenie zewnętrzne

Komendanazwa_polecenia

Załóżmy, że istnieje zewnętrzne polecenie nazwa_komendy, które jest dostępne w trybie interaktywnym i chcesz go użyć w skrypcie bash. Możemy jawnie powiedzieć bashowi, że nazwa_komendy jest poleceniem zewnętrznym za pomocą wbudowanego polecenia.

Przykłady poleceń zewnętrznych

Przykłady poleceń zewnętrznych, zakładając, że są zainstalowane:

plik
wybrać się
figlet
Przykład: Pobierz typ pliku i informacje
{ # pobierz typ pliku i informacje
plik ${infile} # (1,2)
}
# (1) polecenie, plik
# (2) infile={Ścieżka do pliku}
Przykład: zmodyfikowany etap i nowe pliki w git
{ # pliki stage w git
git dodaj.# (1)
}
# (1) polecenie, git
Przykład: Utwórz grafikę ascii za pomocą figlet
{ # utwórz sztukę ascii
figlet${wiadomość} # (1,2)
}
# (1) polecenie, figlet
# (2) message={Wiadomość do wyświetlenia jako ascii art}

Wykonaj wbudowane polecenie

wbudowanynazwa_polecenia

Załóżmy, że nazwa_polecenia jest jednym z poleceń zdefiniowanych jako wbudowane w bash. Aby poinformować bash, że chcemy uruchomić polecenie nazwa_komendy jako polecenie wbudowane, używamy wbudowanego polecenia wbudowanego.

Wbudowane przykłady poleceń
Przykład: Ile wbudowanych?
wbudowany{,}{,,}{,,,} # ile wbudowanych?
Przykład: Fantom deklaruje
{
ogłosić() { wyrzuciłUps!!;}
ogłosić–xfogłosić #?
}

Wniosek

Wykonanie polecenia z poziomu skryptu powłoki bash jest dość łatwe. Istnieją trzy główne typy poleceń. Wiedza o tym, jak proste polecenia są interpretowane w bash, może prowadzić do lepszej kontroli nad tym, jaki typ polecenia jest wykonywany w czasie wykonywania.