to get the file
Transkrypt
to get the file
Laboratorium nr 1 Instrukcja laboratoryjna 1 1) 1/7 Język C Temat: Programowanie w powłoce bash (shell scripting) Przygotował: mgr inż. Maciej Lasota Wprowadzenie do programowania w powłoce Skrypt powłoki (skrypt wsadowy) to zbiór komend danej powłoki zapisany w postaci pliku z atrybutami wykonywania. Skrypty tworzymy w standardowych plikach tekstowych typu ASCII, zawierają one komendy powłoki wraz z dodatkowymi zmiennymi, instrukcjami sterującymi np. instrukcjami warunkowymi, pętlami itp.. Tak stworzone skrypty wykonywane (interpretowane) są przez powłokę danego systemu operacyjnego. Ponieważ w systemach operacyjnych z rodziny Unix/Linux dostępnych jest kilka rodzajów powłok (sh, csh, ksh, zsh, bash) każda z nich w inny sposób interpretuje skrypty. UWAGA !!! Powłoki systemowe nie zawsze są ze sobą kompatybilne składniowo. Jedną z najpopularniejszych i najczęściej spotykanych powłok w systemach uniksowych jest bash. Jest ona domyślną powłoką w większości dystrybucji systemu Unix/Linux oraz w systemie Mac OS X od wersji 10.3, istnieją także wersje dla środowiska Cygwin dla systemów Win32. Powłoka bash umożliwia pracę interaktywną i wsadową (skrypty). Składania powłoki bash umożliwia definiowanie zmiennych, stałych, tablic, aliasów, funkcji i podprogramów, posiada konstrukcje sterujące (if, case, while, for) oraz wiele innych dodatkowych funkcji pozwalających na pisanie zaawansowanych skryptów. 2) Tworzenie pliku tekstowego Jak już zostało wspomniane skrypt powłoki tworzymy w zwykłym standardowym pliku tekstowym. Do stworzenie pustego pliku tekstowego w systemach z rodziny Unix/Linux, możemy wykorzystać np. komendę touch. touch mojskrypt.sh UWAGA !!! Zazwyczaj pliki będące skryptami powłoki mają rozszerzenie *.sh, jest to zasada umowna. Laboratorium nr 1 3) 2/7 Ogólna składnia skryptu powłoki Podstawowy szkielet skryptu powłoki został przedstawiony poniżej: # Nagłówek (może być #!/bin/sh lub #!/bin/bash) # określa nam powłokę która ma wykonywać nasz skrypt #!/bin/bash # Cześć deklaracyjna, w części tej mogą znajdować się # zadeklarowane zmienne, stałe, tablice, funkcje, itd. echo ”Witaj” # Komentarze w skrypcie poprzedzamy znakiem „#” hash'a Aby uruchomić i zaprezentować działanie tak stworzonego skryptu powłoki, należy nadać mu odpowiednie systemowe prawa „wykonywania”. Atrybuty wykonywania dla pliku można nadać za pomocą polecenia chmod. Polecenie to przyjmuje tzw. maskę określającą prawa w postaci 3 liczb (dla właściciela, grupy i pozostałych) oraz nazwę pliku. chmod 755 mojskrypt.sh UWAGA !!! Więcej informacji na temat nadawania atrybutów plikom i katalogom można znaleźć w podręcznikach systemowych tzw. manualach man chmod Skrypt powłoki wykonujemy (uruchamiamy) wpisując ./mojskrypt.sh lub sh mojskrypt.sh. Wszystko umieszczone po znaku # aż do końca linii jest komentarzem. Pierwszy wiersz pliku powinien wyglądać następująco: #!/bin/bash. Polecenie echo służy do wyświetlania danych (komunikatów) na ekranie monitora. 3.1) Zmienne Zmienne w skryptach deklarujemy w następujący sposób: nazwa_zmiennej=”wartość zmiennej” Laboratorium nr 1 3/7 Jako wartość możemy podać liczbę, napis lub polecenia systemowe, polecenia podajemy w postaci odwrotnych apostrofów `polecenie` lub $(polecenie). Do zmiennej odwołujemy się poprzez znak dolara „$”. 3.2) Zmienne specjalne Zmienne specjalne (predefiniowane), są często wykorzystywane w skryptach powłoki (zazwyczaj są tylko do odczytu). Zmienna -> $0 – zmienna zawiera nazwę danego skryptu, Zmienne -> $1...$9 - parametry zewnętrzne przekazywane do skryptu (od 1 do 9), Zmienna -> $@ - zmienna zawiera wszystkie parametry przekazywane do skryptu, Zmienna -> @? - zmienna przechowuje kod powrotu ostatnio wywołanego polecenia (0 oznacza wykonanie polecenia), Zmienna -> 3.3) $$ - PID procesu bieżącej powłoki. Instrukcje warunkowe Instrukcja warunkowa IF: if warunek then polecenie fi lub IF-ELSE: if warunek then polecenie 1 else polecenie 2 else polecenie 3 fi poprawne Laboratorium nr 1 4/7 Instrukcja warunkowa (wyboru) CASE: case $zmienna in ”wzorzec1”) polecenie1 (break/continue/exit);; ”wzorzec2”) polecenie2 (break/continue/exit);; *) polecenie (break/conitnue/exit);; ... esac 3.4) Instrukcje pętli Instrukcja pętli WHILE: while warunek do polecenie ... done Instrukcja pętli FOR: for zmienna in arg1 arg2 arg3 ... do polecenie done 3.5) Tablice Deklaracja tablicy: zmienna=(wartość1 wartość2 wartość3 ...) echo ${tablica[*]} – wyświetlanie wszystkich elementów tablicy, echo ${#tablica[0]} – wyświetlanie długości znaków podanego elementu, echo ${#tablica[@]} – wyświetlanie liczby wszystkich elementów w tablicy. Laboratorium nr 1 unset tablica[6] – usuwanie elementu, echo ${tablica[*]} tablica[6]=tekst – przypisywanie elementu, tablica[7]=tekst2 echo ${tablica[*]} unset tablica[*] – usuwanie całej tablicy echo ${tablica[@] 3.6) Przekierowania i strumienie pwd > plik.txt # zapisanie ścieżki do pliku more < plik.txt # wyświetlenie pliku na ekranie cat plik1.txt > plik2.txt # zpisanie pliku1.txt do pliku2.txt ls *.txt >> plik3.txt # dopisanie do pliku3.txt ps aux | more # wysłanie strumienia danych do programu „more” ps aux | grep apache # wysłanie strumienia danych do programu „grep” ps aux | grep cron | sort > plik .txt 5/7 Laboratorium nr 1 3.7) W 6/7 Wyświetlanie i wczytywanie danych celu wyświetlanie danych na ekranie monitora (standardowe wyjście) wykorzystujemy polecenie echo: echo -n ”Tekst do wyświetlenia” echo -e ”\t Tekst do wyświetlenia i dodatkowo zmienna $a \n\n” Rodzaje parametrów: • -n nie wysyła znaku końca linii (brak przejścia do nowej linii), • -e włącza interpretację parametrów wewnątrz tekstu, Rodzaje parametrów wewnątrz tekstu: • \n - przejście do nowej linii, • \a – alert (dzwonek), • \b - backspace, • \c - pomija znak końca nowej linii, • \f - escape, • \r - znak nowej linii, • \t – tabulacja, • \\ - backslash. W celu wczytania danych do zmiennej wykorzystujemy polecenie „read”: read [operator][zmienna] read a b echo ”$a” echo ”$b” read -e echo ”$REPLY” Laboratorium nr 1 7/7 Rodzaje operatorów: • -a pokaż znak zachęty bez kończącego znaku nowej linii, • -p wczytywanie danych do tablicy, • -e jeśli nie podano żadnej zmiennej dane trafią do zmiennej systemowej $REPLY.