OnWorks Linux i Windows Online WorkStation

logo

Darmowy hosting online dla stacji roboczych

<Poprzedni | Spis treści | Następne>

Jeśli chcesz, podpowiedzi mogą wykonywać skrypty powłoki i zachowywać się inaczej w różnych warunkach. Możesz nawet włączyć melodię za każdym razem, gdy wydasz polecenie, chociaż szybko staje się to nudne. Więcej informacji można znaleźć w Bash-Prompt HOWTO.


obraz

7.2.5. Skrypty powłoki


7.2.5.1. Co to są skrypty?


Skrypt powłoki to, jak widzieliśmy w przykładach konfiguracji powłoki, plik tekstowy zawierający polecenia powłoki. Kiedy taki plik jest używany jako pierwszy argument niebędący opcją podczas wywoływania Bash, a nie -c ani -s podana jest opcja, Bash czyta i wykonuje polecenia z pliku, a następnie kończy działanie. Ten tryb działania tworzy

nieinteraktywna powłoka. Kiedy Bash uruchamia skrypt powłoki, ustawia parametr specjalny 0 do nazwy pliku, a nie do nazwy powłoki, a parametry pozycyjne (wszystko, co następuje po nazwie skryptu) są ustawiane na pozostałe argumenty, jeśli takie zostały podane. Jeśli nie zostaną podane żadne dodatkowe argumenty, parametry pozycyjne zostaną usunięte.


Skrypt powłoki może stać się wykonywalny przy użyciu metody chmod polecenie włączenia bitu wykonania. Kiedy Bash znajdzie taki plik podczas przeszukiwania PATH w przypadku polecenia tworzy podpowłokę w celu jego wykonania. Inaczej mówiąc, wykonanie


filename ARGUMENTY


jest równoznaczne z wykonaniem


bash nazwa pliku ARGUMENTY


jeśli „nazwa pliku” jest wykonywalnym skryptem powłoki. Ta podpowłoka inicjuje się ponownie, tak że efekt jest taki, jakby została wywołana nowa powłoka w celu interpretacji skryptu, z tym wyjątkiem, że lokalizacje poleceń zapamiętanych przez rodzica (patrz haszysz na stronach informacyjnych) są przechowywane przez dziecko.


Większość wersji systemu UNIX czyni to częścią mechanizmu wykonywania poleceń systemu operacyjnego. Jeśli pierwsza linia skryptu zaczyna się od dwóch znaków „#!”, pozostała część linii określa interpreter programu. W ten sposób możesz określić bash, Awk, Perl lub jakiś inny interpreter lub powłoka i napisz resztę pliku skryptu w tym języku.


Argumenty interpretera składają się z pojedynczego opcjonalnego argumentu następującego po nazwie interpretera w pierwszym wierszu pliku skryptu, po którym następuje nazwa pliku skryptu i reszta argumentów. Bash wykona tę akcję na systemach operacyjnych, które same jej nie obsługują.


Skrypty Bash często zaczynają się od


#! / bin / bash (zakładając, że Bash został zainstalowany w /kosz), ponieważ gwarantuje to, że Bash zostanie użyty do interpretacji skryptu, nawet jeśli zostanie on wykonany w innej powłoce.


obraz


7.2.5.2. Kilka prostych przykładów


Bardzo prosty skrypt składający się tylko z jednego polecenia, który wita wykonującego go użytkownika:


[jerry@nigdzie ~] kot hello.sh

#! / bin / bash

echo "Witaj $USER"

[jerry@nigdzie ~] kot hello.sh

#! / bin / bash

echo "Witaj $USER"

Skrypt w rzeczywistości składa się tylko z jednego polecenia, przegapić, który korzysta z wartość ($) o USER zmienna środowiskowa, aby wydrukować ciąg dostosowany do użytkownika wydającego polecenie.


Kolejny jednowierszowy, używany do wyświetlania podłączonych użytkowników:


#! / bin / bash

kto | cięcie -d " " -f 1 | sortuj -u

#! / bin / bash

kto | cięcie -d " " -f 1 | sortuj -u

Oto skrypt składający się z kilku linii, którego używam do tworzenia kopii zapasowych wszystkich plików w katalogu. Skrypt najpierw tworzy listę wszystkich plików w bieżącym katalogu i umieszcza ją w zmiennej WYKAZ. Następnie ustawia nazwę kopii dla każdego pliku, a następnie kopiuje plik. Dla każdego pliku drukowany jest komunikat:


tyle:~> cat bin/makebackupfiles.sh

#! / bin / bash

# wykonaj kopie wszystkich plików w katalogu LIST=`ls`

dla i w $LIST; Do

ORIG=$i

DEST=$i.stary

cp $ORIG $DEST echo "skopiowano $i"

zrobić

tyle:~> cat bin/makebackupfiles.sh

#! / bin / bash

# wykonaj kopie wszystkich plików w katalogu LIST=`ls`

dla i w $LIST; Do

ORIG=$i

DEST=$i.stary

cp $ORIG $DEST echo "skopiowano $i"

zrobić

Wystarczy wpisać linię np mv * *.stary nie zadziała, co zauważysz, próbując tego na zestawie plików testowych. Jakiś przegapić dodano polecenie w celu wyświetlenia jakiejś aktywności. przegapićsą na ogół przydatne, gdy skrypt nie działa: wstaw je po każdym wątpliwym kroku, a szybko znajdziesz błąd.


Połączenia /etc/rc.d/init.d katalog zawiera mnóstwo przykładów. Przyjrzyjmy się temu skryptowi sterującemu fikcyjnym serwerem ICanSeeYou:


#! / Bin / sh

# opis: ICanSeeYou pozwala zobaczyć osoby w sieci


# nazwa procesu: ICanSeeYou

# plik pid: /var/run/ICanSeeYou/ICanSeeYou.pid

# konfiguracja: /etc/ICanSeeYou.cfg


# Biblioteka funkcji źródłowych.

. /etc/rc.d/init.d/functions


# Zobacz jak (z jakimi argumentami) zostaliśmy wywołani. przypadek „1 $” w

początek)

echo -n "Uruchamianie ICanSeeYou: " demon ICanSeeYou

przegapić

dotknij /var/lock/subsys/ICanSeeYou

;;

zatrzymać)

echo -n "Zamykanie ICanSeeYou: "

#! / Bin / sh

# opis: ICanSeeYou pozwala zobaczyć osoby w sieci


# nazwa procesu: ICanSeeYou

# plik pid: /var/run/ICanSeeYou/ICanSeeYou.pid

# konfiguracja: /etc/ICanSeeYou.cfg


# Biblioteka funkcji źródłowych.

. /etc/rc.d/init.d/functions


# Zobacz jak (z jakimi argumentami) zostaliśmy wywołani. przypadek „1 $” w

początek)

echo -n "Uruchamianie ICanSeeYou: " demon ICanSeeYou

przegapić

dotknij /var/lock/subsys/ICanSeeYou

;;

zatrzymać)

echo -n "Zamykanie ICanSeeYou: "


killproc ICanSeeYou echo

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

status)

status ICanSeeYou

;;

restart)

Przystanek 0 USD

Początek 0 dolarów

;;

*)

echo "Użycie: $0 {start|stop|restart|status}" wyjście 1

to C


wyjście 0

killproc ICanSeeYou echo

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

status)

status ICanSeeYou

;;

restart)

Przystanek 0 USD

Początek 0 dolarów

;;

*)

echo "Użycie: $0 {start|stop|restart|status}" wyjście 1

to C


wyjście 0

Najpierw z . polecenie (kropka) zestaw funkcji powłoki, używany przez prawie wszystkie skrypty powłoki w

/etc/rc.d/init.d, jest załadowana. Następnie walizka wydawane jest polecenie, które definiuje 4 różne sposoby wykonania skryptu. Przykładem może być Widzę cię początek. Decyzję, który przypadek zastosować, podejmuje się wczytując (pierwszy) argument do skryptu z wyrażeniem $1.


W przypadku braku zgodnych danych wejściowych stosowany jest przypadek domyślny oznaczony gwiazdką, po czym skrypt wyświetla komunikat o błędzie. The walizka lista kończy się na to C oświadczenie. w początek w przypadku, gdy program serwera jest uruchamiany jako demon i przypisywany jest identyfikator procesu i blokada. w Zatrzymaj się W takim przypadku proces serwera jest śledzony i zatrzymywany, a blokada i identyfikator PID są usuwane. Opcje takie jak Demon opcja i funkcje takie jak zabijproc, są zdefiniowane w /etc/rc.d/init.d/functions plik. Ta konfiguracja jest specyficzna dla dystrybucji użytej w tym przykładzie. Skrypty init w twoim systemie mogą używać innych funkcji, zdefiniowanych w innych plikach, lub wcale.


Po pomyślnym zakończeniu skrypt zwraca do elementu nadrzędnego kod wyjścia o wartości zero.


Skrypt ten jest doskonałym przykładem wykorzystania funkcji, które ułatwiają czytanie skryptu i przyspieszają pracę. Zauważ, że używają sh zamiast bash, aby były przydatne w szerszej gamie systemów. W systemie Linux dzwonię bash as sh powoduje, że powłoka działa w trybie zgodnym z POSIX.


Najlepsze przetwarzanie w chmurze dla systemu operacyjnego w OnWorks: