Skrypt powłoki - Shell script

Edycja skryptu powłoki FreeBSD do konfiguracji ipfirewall

Skrypt to program komputerowy przeznaczony do uruchomienia przez Unix shell , a interpreter wiersza poleceń . Za języki skryptowe uważa się różne dialekty skryptów powłoki . Typowe operacje wykonywane przez skrypty powłoki obejmują manipulację plikami, wykonywanie programu i drukowanie tekstu. Skrypt, który konfiguruje środowisko, uruchamia program i wykonuje niezbędne porządki, rejestruje itp., nazywa się wrapper .

Termin ten jest również używany bardziej ogólnie w znaczeniu zautomatyzowanego trybu uruchamiania powłoki systemu operacyjnego; w określonych systemach operacyjnych nazywa się je innymi rzeczami, takimi jak pliki wsadowe (strumień MSDos-Win95, OS/2 ), procedury poleceń (VMS) i skrypty powłoki ( strumień Windows NT i pochodne innych firm, takie jak 4NT — artykuł znajduje się w cmd). exe ), a systemy operacyjne mainframe są powiązane z wieloma terminami.

Typowa instalacja zgodna z Unix/Linux/POSIX zawiera KornShell ( ksh) w kilku możliwych wersjach, takich jak ksh88, Korn Shell '93 i inne. Najstarszą wciąż używaną powłoką jest powłoka Bourne'a ( sh); Systemy uniksowe mogą również zawierać powłokę C ( csh), Bash ( bash), Remote Shell ( rsh), Secure Shell ( ssh) dla połączeń telnet SSL oraz powłokę, która jest głównym składnikiem instalacji Tcl/Tk, zwykle nazywaną ; życzenie jest powłoką Tcl/Tk opartą na graficznym interfejsie użytkownika. Powłoki C i Tcl mają składnię bardzo podobną do wspomnianych języków programowania, a powłoki Korn i Bash są rozwinięciami powłoki Bourne'a, która jest oparta na języku ALGOL z dodanymi elementami wielu innych. Z drugiej strony, różne powłoki plus narzędzia, takie jak awk , sed , grep i BASIC , Lisp , C i tak dalej, przyczyniły się do rozwoju języka programowania Perl . tclsh

Inne powłoki dostępne na komputerze lub dostępne do pobrania i/lub zakupu obejmują powłokę Almquist ( ash), PowerShell ( msh), powłokę Z ( zsh, szczególnie popularną ulepszoną powłokę KornShell), powłokę Tenex C ( tcsh) i powłokę podobną do Perla ( psh) . Pokrewne programy, takie jak powłoki oparte na Python , Ruby , C , Java , Perl , Pascal , Rexx itp. w różnych formach są również szeroko dostępne. Inną dość popularną powłoką jest Old shell ( osh), której strona podręcznika mówi, że jest to "rozszerzony, kompatybilny wstecz port standardowego interpretera poleceń z szóstej edycji systemu UNIX".

Oprogramowanie interoperacyjne Windows-Unix, takie jak MKS Toolkit , Cygwin , UWIN , Interix i inne, udostępnia powyższe powłoki i programowanie Unix w systemach Windows, zapewniając funkcjonalność aż do sygnałów i innej komunikacji między procesami , wywołań systemowych i interfejsów API . Hamilton C powłoka jest powłoką Windows, który jest bardzo podobny do Uniksa C Shell. Firma Microsoft dystrybuowała usługi Windows Services dla systemu UNIX do użytku w szczególności z systemami operacyjnymi opartymi na systemie NT, które mają podsystem środowiskowy POSIX .

Możliwości

Uwagi

Komentarze są ignorowane przez powłokę. Zazwyczaj zaczynają się od symbolu hash ( # ) i trwają do końca wiersza.

Konfigurowalny wybór języka skryptowego

Shebang lub hash-bang, jest szczególnym rodzajem komentarza których zastosowania systemu w celu określenia co interpreter użyć do wykonania pliku. Shebang musi być pierwszym wierszem pliku i zaczynać się od " #! ". W systemach operacyjnych podobnych do Uniksa znaki następujące po przedrostku „ #! ” są interpretowane jako ścieżka do programu wykonywalnego, który zinterpretuje skrypt.

Skróty

Skrypt powłoki może stanowić wygodną odmianę polecenia systemowego, w którym specjalne ustawienia środowiska, opcje poleceń lub przetwarzanie końcowe są stosowane automatycznie, ale w taki sposób, aby nowy skrypt nadal działał jak w pełni normalne polecenie uniksowe .

Jednym z przykładów może być utworzenie wersji ls , polecenia do wyświetlania plików, nadając mu krótszą nazwę polecenia l , która normalnie byłaby zapisywana w katalogu bin użytkownika jako /home/ nazwa_użytkownika /bin/l i domyślny zestaw wstępnie dostarczonych opcji poleceń.

#!/bin/sh
LC_COLLATE=C ls -FCas "$@"

Tutaj pierwsza linia używa shebang do wskazania, który interpreter powinien wykonać resztę skryptu, a druga linia tworzy listing z opcjami dla wskaźników formatu pliku, kolumn, wszystkich plików (żadne nie pominięte) i rozmiaru w blokach. LC_COLLATE = C ustanawia domyślną kolejność sortowania nie krotnie górnej i dolnej części obudowy razem nie zmieszać dotfiles z prawidłowymi nazwami jako efekt uboczny ignorowania interpunkcyjnych w nazwie (dotfiles zazwyczaj pojawia się tylko wtedy możliwość jak -a jest używany), i „$ @” powoduje żadnych parametrów podanych do l przechodzi przez jako parametry do ls, tak że wszystkie normalne opcje i inne składni znanej ls mogą być nadal używane.

Użytkownik może wtedy po prostu użyć l dla najczęściej używanej krótkiej listy.

Innym przykładem skryptu powłoki, który mógłby zostać użyty jako skrót, to wydrukowanie listy wszystkich plików i katalogów w danym katalogu.

#!/bin/sh

clear
ls -al

W takim przypadku skrypt powłoki zacząłby się od normalnej linii startowej #!/bin/sh . Następnie skrypt wykonuje polecenie clear, które czyści terminal z całego tekstu przed przejściem do następnej linii. Poniższy wiersz zawiera główną funkcję skryptu. Polecenie ls -al wyświetla listę plików i katalogów znajdujących się w katalogu, z którego uruchamiany jest skrypt. Do ls polecenia atrybuty mogą być zmieniane w celu uwzględnienia potrzeb użytkownika.

Uwaga: Jeśli implementacja nie ma polecenia clear , spróbuj zamiast tego użyć polecenia clr .

Zadania wsadowe

Skrypty powłoki umożliwiają automatyczne wykonanie kilku poleceń, które zostałyby wprowadzone ręcznie w interfejsie wiersza poleceń, bez konieczności czekania, aż użytkownik uruchomi każdy etap sekwencji. Na przykład w katalogu z trzema plikami kodu źródłowego C, zamiast ręcznie uruchamiać cztery polecenia wymagane do zbudowania z nich końcowego programu, można zamiast tego utworzyć skrypt dla powłok zgodnych z POSIX , tutaj nazwany build i przechowywany w katalogu z je, które skompilowałyby je automatycznie:

#!/bin/sh
printf 'compiling...\n'
cc -c foo.c
cc -c bar.c
cc -c qux.c
cc -o myprog foo.o bar.o qux.o
printf 'done.\n'

Skrypt umożliwiłby użytkownikowi zapisanie edytowanego pliku, zatrzymanie edytora, a następnie uruchomienie ./build w celu utworzenia zaktualizowanego programu, przetestowanie go, a następnie powrót do edytora. Jednak od lat osiemdziesiątych tego typu skrypty zostały zastąpione narzędziami typu make, które specjalizują się w budowaniu programów.

Uogólnienie

Proste zadania wsadowe nie są niczym niezwykłym w przypadku izolowanych zadań, ale korzystanie z pętli powłoki, testów i zmiennych zapewnia użytkownikom znacznie większą elastyczność. Skrypt POSIX sh do konwersji obrazów JPEG na obrazy PNG, w którym nazwy obrazów są podawane w wierszu poleceń — prawdopodobnie za pomocą symboli wieloznacznych — zamiast każdego z nich wymienionego w skrypcie, można utworzyć za pomocą tego pliku, zwykle zapisanego w pliku takim jak /home/ nazwa użytkownika /bin/jpg2png

#!/bin/sh
for jpg; do                                  # use $jpg in place of each filename given, in turn
    png=${jpg%.jpg}.png                      # construct the PNG version of the filename by replacing .jpg with .png
    printf 'converting "%s" ...\n' "$jpg"    # output status info to the user running the script
    if convert "$jpg" jpg.to.png; then       # use convert (provided by ImageMagick) to create the PNG in a temp file
        mv jpg.to.png "$png"                 # if it worked, rename the temporary PNG image to the correct name
    else                                     # ...otherwise complain and exit from the script
        printf >&2 'jpg2png: error: failed output saved in "jpg.to.png".\n'
        exit 1
    fi                                       # the end of the "if" test construct
done                                         # the end of the "for" loop
printf 'all conversions successful\n'        # tell the user the good news

Polecenie jpg2png można następnie uruchomić na całym katalogu pełnym obrazów JPEG za pomocą tylko /home/ nazwa użytkownika /bin/jpg2png *.jpg

Prawdopodobieństwo

Kluczową cechą skryptów powłoki jest to, że wywoływanie ich interpreterów jest traktowane jako podstawowa cecha systemu operacyjnego. Tak więc zamiast możliwości wykonywania skryptów przez powłokę użytkownika tylko w języku tej powłoki lub skryptu, którego dyrektywa interpretera była obsługiwana poprawnie, jeśli był uruchamiany z powłoki (oba te ograniczenia były ograniczeniami w obsłudze skryptów przez wczesną powłokę Bourne'a), skrypty powłoki są konfigurowane i wykonywane przez sam system operacyjny. Współczesny skrypt powłoki nie jest tylko na tej samej podstawie co polecenia systemowe, ale wiele poleceń systemowych to w rzeczywistości skrypty powłoki (lub ogólniej, skrypty, ponieważ niektóre z nich nie są interpretowane przez powłokę, ale przez Perl , Python lub inny język). Rozciąga się to na zwracanie kodów zakończenia, podobnie jak inne narzędzia systemowe, w celu wskazania sukcesu lub niepowodzenia, i pozwala na wywoływanie ich jako komponentów większych programów, niezależnie od tego, jak te większe narzędzia są zaimplementowane.

Jak standardowych poleceń systemu, skrypty powłoki klasycznie pominięcie jakiegokolwiek rozszerzenia pliku, chyba że mają być wczytywane do uruchomionego skorupy za pomocą specjalnego mechanizmu do tego celu (takich jak sh „s« . »lub csh „s source ).

Programowanie

Wiele nowoczesnych powłok dostarcza również różnych funkcji, które zwykle można znaleźć tylko w bardziej wyrafinowanych językach programowania ogólnego przeznaczenia , takich jak konstrukcje przepływu sterowania, zmienne, komentarze , tablice, podprogramy i tak dalej. Mając do dyspozycji tego rodzaju funkcje, możliwe jest pisanie dość wyrafinowanych aplikacji jako skryptów powłoki. Jednak nadal są one ograniczone przez fakt, że większość języków powłoki ma niewielkie lub żadne wsparcie dla systemów typowania danych, klas, wątków, złożonej matematyki i innych wspólnych funkcji pełnego języka, a także ogólnie jest znacznie wolniejsza niż skompilowany kod lub języki interpretowane z szybkością jako celem wydajności.

Standardowe narzędzia uniksowe sed i awk zapewniają dodatkowe możliwości programowania powłoki; Perl może być również osadzony w skryptach powłoki, podobnie jak inne języki skryptowe, takie jak Tcl . Perl i Tcl są również dostarczane z zestawami narzędzi graficznych.

Inne języki skryptowe

Wiele potężnych języków skryptowych zostało wprowadzonych do zadań, które są zbyt duże lub zbyt złożone, aby można je było wygodnie obsługiwać za pomocą zwykłych skryptów powłoki, ale dla których zalety skryptu są pożądane, a koszty rozwoju w pełni skompilowanego języka programowania byłyby niekorzystne . Specyfika tego, co oddziela języki skryptowe od języków programowania wysokiego poziomu, jest częstym źródłem debaty, ale ogólnie rzecz biorąc, język skryptowy to taki, który wymaga interpretera.

Koło życia

Skrypty powłoki często służą jako początkowy etap tworzenia oprogramowania i często podlegają późniejszej konwersji do innej podstawowej implementacji, najczęściej konwertowane do Perl , Python lub C . Dyrektywa interpreter pozwala szczegółowo wdrożenie być całkowicie schowany wewnątrz skryptu, zamiast być wystawiony jako rozszerzenie nazwy pliku i zapewnia bezproblemową reimplementacji w różnych językach bez wpływu na użytkowników końcowych.

Natomiast pliki z „.SH” rozszerzenie pliku są zazwyczaj skryptem powłoki jakiegoś większość skrypty powłoki nie mają rozszerzenie nazwy pliku.

Zalety i wady

Być może największą zaletą pisania skryptu powłoki jest to, że polecenia i składnia są dokładnie takie same, jak te wprowadzone bezpośrednio w wierszu poleceń. Programista nie musi przełączać się na zupełnie inną składnię, jak gdyby skrypt był napisany w innym języku lub gdyby został użyty język skompilowany.

Często pisanie skryptu powłoki jest znacznie szybsze niż pisanie równoważnego kodu w innych językach programowania. Wiele zalet obejmuje łatwy wybór programu lub pliku, szybki start i interaktywne debugowanie. Skrypt powłoki może być użyty do zapewnienia powiązania sekwencjonowania i podejmowania decyzji wokół istniejących programów, a dla skryptów o średniej wielkości zaletą jest brak kroku kompilacji. Interpretacyjne uruchamianie ułatwia pisanie kodu debugującego do skryptu i ponowne uruchamianie go w celu wykrycia i naprawienia błędów. Użytkownicy nie będący ekspertami mogą używać skryptów do dostosowywania zachowania programów, a skrypty powłoki zapewniają pewien ograniczony zakres wieloprocesowości.

Z drugiej strony skrypty powłoki są podatne na kosztowne błędy. Błędy przypadkowego pisania, takie jak rm -rf * / (zamiast zamierzonego rm -rf */ ) są folklorem społeczności Uniksowej; pojedyncza dodatkowa spacja zamienia polecenie z takiego, które usuwa wszystkie podkatalogi zawarte w bieżącym katalogu, na takie, które usuwa wszystko z katalogu głównego systemu plików . Podobne problemy mogą przekształcić cp i mv w niebezpieczną broń, a niewłaściwe użycie przekierowania > może usunąć zawartość pliku. Jest to tym bardziej problematyczne, że wiele poleceń UNIX różni się nazwą tylko jedną literą: cp , cd , dd , df , itd.

Inną istotną wadą jest niska szybkość wykonywania i konieczność uruchomienia nowego procesu dla prawie każdego wykonywanego polecenia powłoki. Kiedy zadanie skryptu może być wykonane przez utworzenie potoku, w którym wydajne polecenia filtrujące wykonują większość pracy, spowolnienie jest łagodzone, ale złożony skrypt jest zwykle o kilka rzędów wielkości wolniejszy niż konwencjonalnie skompilowany program, który wykonuje równoważne zadanie.

Istnieją również problemy ze zgodnością między różnymi platformami. Larry Wall , twórca Perla , napisał, że "Łatwiej jest przenieść powłokę niż skrypt powłoki".

Podobnie, bardziej złożone skrypty mogą napotkać ograniczenia samego języka skryptowego powłoki; ograniczenia utrudniają pisanie kodu wysokiej jakości, a rozszerzenia przez różne powłoki łagodzące problemy z oryginalnym językiem powłoki mogą je pogorszyć.

Wiele wad korzystania z niektórych języków skryptowych jest spowodowanych błędami projektowymi w składni języka lub implementacji i niekoniecznie jest narzucanych przez użycie wiersza poleceń opartego na tekście; istnieje wiele powłok, które używają innych języków programowania powłoki lub nawet pełnoprawnych języków, takich jak Scsh (który używa Scheme ).

Skrypty powłoki w innych systemach operacyjnych

Oprogramowanie interoperacyjne, takie jak Cygwin , MKS Toolkit , Interix (dostępny w Microsoft Windows Services dla UNIX), Hamilton C shell , UWIN (AT&T Unix dla Windows) i inne umożliwiają uruchamianie programów powłoki Unix na komputerach z systemem Windows NT i jego następcy, z pewną utratą funkcjonalności w gałęzi MS-DOS - Windows 95 , a także wcześniejsze wersje MKS Toolkit dla OS/2. Co najmniej trzy implementacje DCL dla systemów operacyjnych typu Windows — oprócz XLNT , pakietu języka skryptowego wielokrotnego użytku, który jest używany z powłoką poleceń, hostem skryptów Windows i programowaniem CGI — są również dostępne dla tych systemów. Mac OS X i późniejsze są również podobne do systemu Unix.

Oprócz wyżej wymienionych narzędzi, niektóre funkcje POSIX i OS/2 mogą być również używane z odpowiednimi podsystemami środowiskowymi serii systemów operacyjnych Windows NT aż do Windows 2000. Trzeci, 16-bitowy podsystem, często nazywany podsystemem MS-DOS, używa Command.com dostarczanego z tymi systemami operacyjnymi do uruchamiania wyżej wymienionych plików wsadowych MS-DOS.

Alternatyw konsoli 4dos , 4OS2 , FreeDOS , Peter Norton „s NDOs i 4nt / Take Command , która dodać funkcjonalność cmd.exe Windows NT stylu, 95 pliki wsadowe systemu MS-DOS / Windows (prowadzony przez Command.com), OS / Programy cmd.exe i 4NT programu 2 są odpowiednio podobne do ulepszanych przez nie powłok i są bardziej zintegrowane z hostem skryptów systemu Windows, który zawiera trzy preinstalowane silniki: VBScript, JScript i VBA, do którego można podłączyć wiele silników innych firm. należy dodać, z Rexx, Perl, Python, Ruby i Tcl posiadającymi predefiniowane funkcje w 4NT i powiązanych programach. PC DOS jest dość podobny do MS-DOS, podczas gdy DR DOS jest bardziej inny. Wcześniejsze wersje systemu Windows NT mogą uruchamiać współczesne wersje 4OS2 przez podsystem OS/2.

Języki skryptowe z definicji można rozszerzać; na przykład systemy typu MS-DOS/Windows 95/98 i Windows NT umożliwiają programom powłoki/wsadowym wywoływanie takich narzędzi, jak KiXtart , QBasic , różne implementacje BASIC , Rexx , Perl i Python , Windows Script Host i jego zainstalowane silniki . W Uniksie i innych systemach zgodnych z POSIX , awk i sed są używane do rozszerzania zdolności skryptów powłoki do przetwarzania łańcuchów i liczb. Tcl , Perl, Rexx i Python mają zestawy narzędzi graficznych i mogą być używane do kodowania funkcji i procedur dla skryptów powłoki, które stanowią wąskie gardło prędkości (C, Fortran, język asemblerowy itp. są nadal znacznie szybsze) oraz do dodawania funkcji niedostępnych w powłoce język, taki jak gniazda i inne funkcje łączności, intensywne przetwarzanie tekstu, praca z liczbami, jeśli skrypt wywołujący nie ma tych zdolności, samo pisanie i samomodyfikowanie kodu, techniki takie jak rekurencja , bezpośredni dostęp do pamięci, różne rodzaje sortowania i więcej, co w scenariuszu głównym jest trudne lub niemożliwe i tak dalej. Visual Basic for Applications i VBScript mogą być używane do kontrolowania i komunikowania się z takimi rzeczami, jak arkusze kalkulacyjne, bazy danych, wszelkiego rodzaju programy ze skryptami, oprogramowanie telekomunikacyjne, narzędzia programistyczne, narzędzia graficzne i inne oprogramowanie, do którego można uzyskać dostęp za pośrednictwem Component Object Model .

Zobacz też

Bibliografia

Zewnętrzne linki