Podstawy programowania skryptów Sh

Podobne dokumenty
1 Przygotował: mgr inż. Maciej Lasota

Skrypty BASH a. Systemy Operacyjne 2. Mateusz Hołenko. 4 października 2012

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Pracownia Komputerowa wykład III

System operacyjny Linux

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Systemy operacyjne. Programowanie w shellu: BASH. Wydział Inżynierii Metali i Informatyki Przemysłowej

Powłoka (shell) Powłoka ksh

Programowanie skryptów powłoki

Systemy operacyjne 11

Wprowadzenie do programowania w powłoce

Powłoka bash. Kurs systemu Unix 1

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Technologie Informacyjne - Linux 3

Wstęp do Informatyki dla bioinformatyków

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

POPULARNE POLECENIA SKRYPTY. Pracownia Informatyczna 2

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Architektura systemów informatycznych. Powłoka systemowa Architektura procesora

pico mojskrypt bash mojskrypt chmod +x mojskrypt./mojskrypt

1 Podstawy c++ w pigułce.

Pracownia Komputerowa wykład III

KARTA KURSU. Języki skryptowe

1 Podstawy c++ w pigułce.

Interpreter poleceń oraz zmienne środowiskowe

Powłoka interpreter poleceń systemu UNIX

Tworzenie skryptu: Skrypty powłoki

Programowanie w języku Python. Grażyna Koba

Programowanie w BASH u Skrypt do ćwiczeń

Środowisko programisty Zestaw 7

Wprowadzenie do programowania shella (bash)

Skrypty powłoki w systemie Linux

Kurs pisania skryptów w powłoce BASH

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Strona1. Linux. Skrypty powłoki

Laboratorium Ubuntu Linux.

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

12. Skrypty w Linux - funkcje, instrukcje sterujące i obliczenia arytmetyczne

PODSTAWY INFORMATYKI

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: pierwsza linia określa powłokę, w której wykonywany jest skrypt; druga to komentarz

PRACOWNIA INFORMATYCZNA CHARAKTERYSTYKA PRZEDMIOTU BASH - PODSTAWOWE INFORMACJE

Podstawy informatyki

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Podstawy programowania skrót z wykładów:

Instrukcja SO powłoka BASH i skrypty powłoki Istotne jest zrozumienie działania narzędzia history powłoki BASH. Każde polecenie wprowadzone i

Języki skryptowe w programie Plans

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Podstawy programowania w Bash'u

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

chmod +x skrypt /bin/bash nazwa_skryptu ZMIENNA=123 ZMIENNA="wartość tekstowa" SCIEZKA="$HOME/plik" echo $SCIEZKA

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

Wprowadzenie do Scilab: podstawy języka Scilab

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

ECDL Podstawy programowania Sylabus - wersja 1.0

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Bloki anonimowe w PL/SQL

Języki programowania zasady ich tworzenia

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Systemy Operacyjne. Część II Zarządzanie/Administracja Systemem. 5: Skrypty. autor: mgr inż. Andrzej Woźniak

Zapis algorytmów: schematy blokowe i pseudokod 1

Ćwiczenie 1. Wprowadzenie do programu Octave

- wszystkie elementy - wszystkie elementy

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Funkcje i instrukcje języka JavaScript

Programowanie w języku C++ Grażyna Koba

Pracownia Komputerowa wyk ad III

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Umieszczanie kodu. kod skryptu

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Podstawy JavaScript ćwiczenia

Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

BASH - WPROWADZENIE Bioinformatyka 4

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy Programowania C++

Warsztaty dla nauczycieli

Programowanie obiektowe

Pascal - wprowadzenie

Podstawy programowania w języku C

Trochę o plikach wsadowych (Windows)

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Wyrażenia regularne. Wyrażenia regularne 1/41

Transkrypt:

Grzegorz Jacek Nalepa 25.11.2000, Kraków, Revision : 1.4 Streszczenie Artykuł jest wprowadzeniem do tworzenia skryptów w języku powłoki Sh. Przedstawione są podstawowe konstrukcje języka Sh. Najważniejsze mechanizmy wykorzystywane przy tworzeniu skryptów są zademonstrowane na przykładach. Pokazany jest również tryb edycyjny edytora GNU Emacs, przydatny przy pisaniu skryptów. Spis treści 1 Wstęp 2 2 Co to jest skrypt sh? 2 3 Zmienne 3 4 Instrukcje warunkowe 4 5 Pętle 6 6 Funkcje 6 7 Przydatne polecenia 7 8 Podsumowanie 8 1 Tekst ukazał się w: Magazynie Netforum, nr 1/2001, wydawanym przez Lupus. 2 Kontakt z autorem: mail:gjn@agh.edu.pl 3 Tytuł angielski: An Introduction to Sh programming 4 Tekst jest rozpowszechniany na zasadach licencji GNU Free Documentation License, której pełny tekst można znaleźć pod adresem: http://www.gnu.org/copyleft/fdl.html 1

1. Wstęp Prędzej czy później, praktycznie każdy administrator systemu uniksowego zaczyna potrzebować narzędzia programistycznego, które ułatwiłoby jego pracę. Jego wybór często pada na język skryptowy powłoki sh. Podstawowymi cechami takiego narzędzia programistycznego powinny być z jednej strony prostota i łatwość wykorzystania dla osoby, która nie musi być programistą, a z drugiej uniwersalność i duże możliwości. Języki skryptowe są naturalnym wyborem, gdyż nie wymagają dodatkowych narzędzi takich jak na przykład kompilator. Ponieważ są one interpretowane to kod źródłowy programu jest równocześnie kodem wykonywalnym. Pozwala to na stosunkowo łatwe i szybkie pisanie oraz testowanie programów. Aktualnie dostępnych jest wiele zaawansowanych języków skryptowych. Najbardziej znany i często uznawany za najpotężniejszy to zapewne Perl. Popularność zdobywa również nowoczesny, zorientowany obiektowo, Python. Rozpowszechniony jest Tcl wraz ze swoimi rozszerzeniami do tworzenia interfejsów graficznych, takich jak Tk. Język skryptowy powłoki sh nie jest pełnowartościowym językiem w takim sensie w jakim są nimi wyżej wymienione języki. Ma najprostsze typy danych i stosunkowo ograniczony zbiór instrukcji. Zapewnia za to rozbudowane mechanizmy komunikacji, które rekompensują brak dodatkowych bibliotek czy modułów. Zaletą sh jest więc w praktyce jego prostota i uniwersalność. Dlatego służy najczęściej do efektywnego i łatwego łączenia pracy standardowych narzędzi uniksowych. Tego typy języki określa się często po angielsku glue languages, czyli językami sklejającymi działanie innych narzędzi. 2. Co to jest skrypt sh? Skrypt w języku sh to plik tekstowy zawierający dowolne polecenia wykonywalne oraz wyrażenia języka sh. Tak więc w praktyce nawet prosta sekwencja poleceń, normalnie wydawanych w powłoce sh, zapisana w pliku staje się skryptem. Aby taki skrypt można było wykonywać bezpośrednio poprzez podanie nazwy należy nadać mu atrybut wykonywalności. Wykonywalny plik tekstowy zawierający polecenia jest uruchamiany najczęściej przy pomocy powłoki logowania użytkownika. Aby mieć pewność, że skrypt zostanie uruchomiony przy pomocy odpowiedniego interpretera trzeba to w nim zapisać. Pierwsza linia każdego skryptu powinna mieć postać: #!/pełna_ścieżka/nazwa_interpretera opcje Co w przypadku skryptów sh wygląda następująco: #!/bin/sh Od znaku hash (#) zaczyna się również komentarze w skryptach. Ponieważ skrypty są zwykłymi plikami tekstowymi, do ich pisania może być użyty dowolny edytor. Warto jednak zauważyć, że niektóre edytory mają rozbudowane tryby edycji skryptów sh. Na przykład GNU Emacs ma wbudowany tryb sh-mode, pozwalający na kolorowanie składni skryptu i udostępniający makra do tworzenia najczęściej wykorzystywanych konstrukcji. Przykład pracy z tym trybem jest pokazany na Rysunku 1. Również edytory Vim i mcedit mają tryby edycyjne sh. Do pisania złożonych skryptów potrzebna jest znajomość podstawowych elementów języka sh, takich jak zmienne, metody komunikacji z otoczeniem skryptu, sterujące sh i funkcje. Wszystkie te elementy zostaną omówione poniżej. 2 CO TO JEST SKRYPT SH? 2

Rysunek 1: Tryb sh GNU Emacsa Omawiane przykłady są uruchamiane w środowisku powłoki GNU Bash, będącej prawdopodobnie najlepszą i jedną z najpopularniejszych implementacji sh. Tym niemniej większość z nich powinna działać w innych powłokach zgodnych z sh. 3. Zmienne Podstawowym typem zmiennych używanych przez sh są napisy. pomocy operatora przypisania: Zmienne definiuje się przy zmienna=wartość Wartość zmiennej jest napisem. Nazwa zmiennej może zawierać wielkie i małe litery, z tym że tradycyjnie zmienne środowiskowe powłoki są pisane wielkimi literami. Pomiędzy nazwą, operatorem przypisania, a wartością, nie może być odstępów. Poprzedzając nazwę zmiennej słowem kluczowym export wymusza się jej dziedziczenie przez procesy potomne danej powłoki. Innymi słowy, jeżeli zmienna zostanie zdefiniowana w ten sposób, to będzie ona dostępna dla wszystkich programów uruchomionych z danej powłoki (lub skryptu). Przy definiowaniu i odwoływaniu się do zmiennych przydają się znaki cytowania czyli apostrofy i cudzysłowy. Pozwalają one na przypisywanie napisów składających się z kilku słów. Różnica między nimi polega na tym, że apostrofy wyłączają mechanizm podstawiania nazw zmiennych i znaków specjalnych powłoki, na przykład: $ echo "To jest shell:" "$SHELL" To jest shell: /bin/bash $ echo "To jest shell:" $SHELL 3 ZMIENNE 3

To jest shell: $SHELL Przykład pokazuje również jak odwoływać się do wartości zmiennych poprzez znak dolara. Użyte w przykładzie polecenie powłoki echo służy do wypisywania tekstów. Poprzedzając nazwę zmiennej znakiem dolara powinno się ją otaczać nawiasami klamrowymi. Pozwala to na bezpieczne włączanie wartości zmiennych w napisy: $ echo "To jest shell:${shell}-tu dlaszy ciąg" To jest shell:/bin/bash-tu dlaszy ciąg Jednym z podstawowych mechanizmów umożliwiających łączenie skryptów sh z innymi poleceniami jest mechanizm wstawiania wyniku działania innych poleceń do wartości zmiennych. $ DATE= date ; echo "Aktulna data: ${DATE}" Aktulna data: Sun Nov 26 21:57:37 CET 2000 $ DATE=$(date) ; echo "Aktulna data: ${DATE}" Aktulna data: Sun Nov 26 21:57:51 CET 2000 W tym przypadku wartości zmiennej DATE jest przypisywany wynik działania polecenia date. Drugi z podanych przykładów działa wyłącznie w powłoce GNU Bash. Mówiąc o zmiennych należy wspomnieć o tym, że skrypt sh ma, podobnie jak inne programy uruchamiane z poziomu powłoki, dostęp do zmiennych środowiskowych: $ echo "Katalog domowy to: ${HOME}" Katalog domowy to: /home/gjn W każdym skrypcie dodatkowo jest definiowany szereg zmiennych związanych z parametrami jego wywołania. Zmienne w postaci $N, gdzie N jest liczbą, przechowują argumenty wywołania skryptu, czyli są odpowiednikami napisów argv[n] w języki ANSI C. Zmienna $0 przechowuje nazwę z jaką został wywołany skrypt, $# liczbę wszystkich argumentów, a $@ wszystkie argumenty. Poniższy przykład prezentuje ich użycie: #!/bin/sh echo "Skrypt ${0} został wywołany z ${#} argumentami." echo "Z czego 1. to: ${1}, a 3. to: ${3}" Uruchomienie tego prostego skryptu daje wynik: $./t1 alfa beta gamma Skrypt./t1 został wywołany z 3 argumentami. Z czego 1. to: alfa, a 3. to: gamma 4. Instrukcje warunkowe Język sh oferuje podstawowe konstrukcje sterujące, takie jak if i case. Instrukcja warunkowa if ma następującą składnię: if [ warunek ] then elif [ warunek ] then else fi 4 INSTRUKCJE WARUNKOWE 4

Do konstruowania warunków najczęściej wykorzystuje się instrukcję test(1). Powłoka pozwala na jej uproszczone wywołanie, to znaczy z pominięciem samej nazwy polecenia test, a jedynie z podaniem odpowiedniego operatora porównania. Operatory polecenia test są przedstawione w Tabeli 1. Przy porównywaniu napisów trzeba pamiętać o konieczności otaczania wartości Operator Opis Operacje na plikach prawdziwe jeżeli plik -e plik istnieje -d plik jest katalogiem -f plik jest zwykłym plikiem -L plik jest linkiem symbolicznym -r plik można czytać -w plik można zapisywać -x plik można wykonywać plik1 -nt plik2 jeżeli plik1 jest nowszy niż plik2 plik1 -ot plik2 jeżeli plik1 jest starszy niż plik2 Porównywanie napisów prawdziwe jeżeli -z napis napis ma długość 0 -n napis napis ma długość niezerową napis1 = napis2 napis1 jest identyczny z napisem2 napis1!= napis2 napis1 jest różny od napisu2 Operatory arytmetyczne prawdziwe jeżeli wartości są wart1 -eq wart2 są sobie równe wart1 -ne wart2 różne wart1 -lt wart2 1. mniejsza od 2. wart1 -le wart2 1. mniejsza lub równa 2. wart1 -gt wart2 1. większa od 2. wart1 -ge wart2 1. większa lub równa 2. Tablica 1: Operatory polecenia test. zmiennych znakami cudzysłowu. Instrukcja case jest złożoną instrukcją warunkową. Ma następującą składnię: case $ZMIENNA in WARTOŚĆ1) instrukcja ;; WARTOŚĆ2) instrukcja ;;... WARTOŚĆN) instrukcja ;; *) instrukcja ;; esac 4 INSTRUKCJE WARUNKOWE 5

Gwiazdka w miejscu ostatniej wartości oznacza wszystkie pozostałe wartości i odpowiada instrukcji default w ANSI C. 5. Pętle Podczas pisania skryptów w sh można wykorzystywać 3 podstawowe typy pętli. Pierwszym z nich jest pętla for, której składnia ma postać: for ZMIENNA in LISTA_WARTOŚCI do done W kolejnych cyklach wykonywania pętli ZMIENNEJ są przypisywane kolejne elementy z LISTY WARTOŚCI. Poniższe przykłady pokazują różne możliwości wykorzystania pętli: $ for i in 1 2 3 ; do echo "Zmienna i ma wart.: ${i}" ; done Zmienna i ma wart.: 1 Zmienna i ma wart.: 2 Zmienna i ma wart.: 3 $ for i in /etc/hosts* ; do echo "Plik: ${i}" ; done Plik: /etc/hosts Plik: /etc/hosts.allow Plik: /etc/hosts.deny Plik: /etc/hosts.equiv Dwa kolejne typy pętli to while i until: while [ warunek ] do done until [ warunek ] do done We wszystkich 3 pętlach można używać poleceń break i continue w celu przerwania pętli, lub kontynuowania kolejnego cyklu pętli. 6. Funkcje Przy bardziej złożonych skryptach bardzo przydaje się dodatkowy mechanizm strukturalizacji kodu, a mianowicie funkcje. Definicja funkcji może mieć dwojaką postać: function nazwa_funkcji() { } 6 FUNKCJE 6

nazwa_funkcji() { } Funkcje są uruchamiane przez tę samą powłokę co sam skrypt, w przeciwieństwie do zewnętrznych poleceń uruchamianych przez mechanizm $(). Podczas uruchamiania funkcji zmienne $N wskazują na argumenty z jakimi została wywołana funkcja, zmienna $# wskazuje na liczbę tych argumentów, a zmienna $0 nie zmienia swojej wartości. Wewnątrz funkcji można definiować zmienne lokalne, to znaczy takie, których zasięg nazw obowiązuje tylko w funkcji. Reszta zmiennych jest dzielona pomiędzy główną częścią skryptu a funkcją. Powrót z funkcji można wymusić poprzez instrukcję return. Opisane powyżej mechanizmy można pokazać na przykładzie skryptu: #!/bin/sh stan() { local kat=$(ls..) echo "Plik ${1}" if [ "${1}"!= "istnieje" ] then echo -n "Katalog wyżej niż ${PWD}: " echo ${kat} fi return } kat=$(ls) echo -n "Katalog bieżący (${PWD}): " echo $kat echo "Podałeś plik: \"${1}\"" if [ -e "$1" ] ; then stan "istnieje." else stan "nie znaleziony!" fi Skrypt demonstruje przekazywanie argumentów do funkcji, zmienne lokalne i globalne, a także instrukcję warunkową if. $./t3 h Katalog bieżący (/tmp/a/a): e f g t3 Podałeś plik: "h" Plik nie znaleziony! Katalog wyżej niż /tmp/a/a: a b c d 7. Przydatne polecenia Ponieważ sh nie ma dodatkowych bibliotek funkcji, jak to ma na przykład miejsce w przypadku Perla, intensywnie wykorzystuje zewnętrzne polecenia systemowe. Te polecenia są przykładowo 7 PRZYDATNE POLECENIA 7

używane do operowania na napisach. W Tabeli 2 są pokazane niektóre z najczęściej wykorzystywanych tego typu narzędzi. sed Polecenie Opis Przykład basename podaje nazwę pliku bez nazwy katalogu basename /tmp/a.png.png i ew. bez rozszerzenia dirname podaje ścieżkę dostępu do pliku dirname /tmp/a.png grep umożliwia zaawansowane wyszukiwanie wzorców (wyrażeń regularnych) w pliku grep wyrażenie plik cut pozwala na wycinanie podanego echo "Users $(cut -d: -f1 zakresu znaków, lub pól rozdzielonych /etc/passwd)" zdefiniowanym znakiem head wypisuje zadaną liczbę linii z początku pliku head -n 1 tail wypisuje zadaną liczbę linii z tail -n 1 końca pliku sort sortuje w porządku alfabetycz- sort plik nym plik zaawansowany edytor operujący na strumieniu danych wejściowych; pozwala na przykład zamianę jednego napisu na inny sed s/stary napis/nowy napis/ Tablica 2: Narzędzia operujące na napisach 8. Podsumowanie Na koniec warto zauważyć, że możliwości programowaia skryptów sh są nieco większe w przypadku powłoki GNU bash. Jest ona wyposażona w zawansowane mechanizmy i polecenia wbudowane nie występujące w innych powłokach. Zainteresowani mogą się z nimi zaznajomić w podręczniku systemowym bash(1). Artykuł prezentuje na przykładach najważniejsze elementy i mechanizmy języka sh. Ich umiejętne łączenie i wykorzystanie wymaga rzecz jasna nieco praktyki, lecz pozwala na pisanie dość złożonych skryptów, będących nieodzowną pomocą w codziennej pracy administratora. 8 PODSUMOWANIE 8