Systemy operacyjne. Laboratorium 1. Podstawy oraz powłoka BASH

Podobne dokumenty
Bash - wprowadzenie. Bash - wprowadzenie 1/39

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

1 Przygotował: mgr inż. Maciej Lasota

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Powłoka bash. Kurs systemu Unix 1

System operacyjny Linux

Pracownia Komputerowa wykład III

Skrypty powłoki w systemie Linux

Systemy operacyjne. Laboratorium 7. Perl podstawy. Jarosław Rudy Politechnika Wrocławska 27 kwietnia 2017

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

Technologie Informacyjne - Linux 3

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

Wstęp do Informatyki dla bioinformatyków

Pracownia Komputerowa wykład III

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Systemy operacyjne. Laboratorium 8. Perl find

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

Interpreter poleceń oraz zmienne środowiskowe

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

Systemy operacyjne. Laboratorium 3. Find. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

pico mojskrypt bash mojskrypt chmod +x mojskrypt./mojskrypt

Trochę o plikach wsadowych (Windows)

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

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

Programowanie skryptów powłoki

Kurs pisania skryptów w powłoce BASH

Wprowadzenie do programowania shella (bash)

Środowisko programisty Zestaw 7

Wprowadzenie do programowania w powłoce

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

Niektóre katalogi są standardowymi katalogami zarezerwowanymi do użytku przez system. Znaczenie wybranych katalogów systemowych jest następujące:

Powłoka interpreter poleceń systemu UNIX

BASH - WPROWADZENIE Bioinformatyka 4

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

Systemy operacyjne. Laboratorium 5. Awk podstawy. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

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

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

1 Podstawy c++ w pigułce.

Linux: System Plików

7. Pętle for. Przykłady

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

Operatory zmiany sposobu przypisania standardowych strumieni >,<,>> Jeżeli pierwsze polecenie powiodło się to wykona drugie

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

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

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ć

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

Tworzenie skryptu: Skrypty powłoki

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

Ćwiczenie nr 14: System Linux

host name: protokół SSH System plików - wprowadzenie Ścieżki dostępu

Systemy operacyjne. Laboratorium 2. Dowiązania. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Umożliwia ona pokazanie ukrytych plików i katalogów, nazwa ich zaczyna się od kropki.

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

Systemy operacyjne 11

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Bash - instrukcje warunkowe, pętle i funkcje

Powłoka (shell) Powłoka ksh

ForPascal Interpreter języka Pascal

#!/bin/sh. if [ "$#"!= "1" ]; then echo "Skrypt uruchamiany z parametrem (sciezka do katalogu)" exit 1 fi

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

2. Łańcuchy tekstowe w PHP

Wstęp do systemu Linux

Podstawy programowania skryptów Sh

Oczywiście plik musi mieć rozszerzenie *.php

Linuks skrypty Część teoretyczna

Pracownia Informatyczna I ORGANIZACJA ZAJĘĆ, ZASADY ZALICZENIA

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

tworzenie katalogów Aby utworzyć nowy katalog wpisz: mkdir katalog1 Ta komenda utworzy katalog o nazwie katalog1.

Przekierowanie wejścia wyjścia:

W pierwszej kolumnie wyświetlany jest identyfikator procesu (pid)

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

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

PRACOWNIA INFORMATYCZNA CHARAKTERYSTYKA PRZEDMIOTU BASH - PODSTAWOWE INFORMACJE

1 Podstawy c++ w pigułce.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Podstawy Programowania Podstawowa składnia języka C++

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Technologie Informacyjne - Linux 2

Cw.12 JAVAScript w dokumentach HTML

POPULARNE POLECENIA SKRYPTY. Pracownia Informatyczna 2

1. Znajdź za pomocą programu locate wszystkie pliki które zawierają w nazwie słowo netscape locate netscape

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I

Pracownia Komputerowa wyk ad II

PODSTAWY INFORMATYKI

Podstawy Programowania C++

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Wstęp do systemu Linux

- wszystkie elementy - wszystkie elementy

4. Funkcje. Przykłady

Programowanie w języku Python. Grażyna Koba

Pracownia Komputerowa wyk ad III

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

Programowanie w BASH u Skrypt do ćwiczeń

Komendy Ubuntu MARCEL GAŃCZARCZYK 2T I 1

Podstawy JavaScript ćwiczenia

Projektowanie aplikacji internetowych Pisanie skryptów wiersza poleceń - pętle

Transkrypt:

Systemy operacyjne Laboratorium 1 Podstawy oraz powłoka BASH Powłoka bash jest podstawową powłoką systemu Linuks, która będzie używana przez większą część kursu. Zrozumienie działania tej powłoki jest niezwykle istotne, ponieważ wiele późniejszych komend i mechanizmów (find, awk, potoki) korzysta z tej powłoki lub jest uruchamiane z jej poziomu. Laboratorium to ponadto obejmuje ogólne podstawy pracy w systemach typu Linuks (lub Uniks), wliczając w to podstawową obsługę konsoli, edytorów tekstów oraz tworzenie i uruchamianie skryptów bashowych. 1 Wymagania ogólne Poniżej znajduje się lista wymagań odnośnie dozwolonego sposobu pisania skryptów bashowych (pierwsze sześć tematów). 1. Wszystkie skrypty powinny być wywoływane jako pliki uruchamialne (np../skrypt) zamiast jawnego wywoływania basha (np. bash skrypt). 2. Wszystkie skrypty powinny działać poprawnie niezależnie od tego, z którego miejsca systemu plików zostały wywołane. 3. Definiowanie funkcji nie jest zwykle potrzebne i nie jest zalecane podczas laboratorium (chociaż jest przydatne w praktyce). 4. Użycie tablic jest zwykle zabronione (ich rolę najczęściej przejmują listy). 5. Zaawansowane komendy (jak xargs) nie są z reguły potrzebne i nie powinny być stosowane. 6. Użycie zagnieżdżonych pętli for jest zabronione, chyba, że zadanie jawnie na to zezwala. 2 Podstawowe informacje 1. Podstawowa znajomość systemu plików: umiejętność tworzenia podstawowych ścieżek do plików. Rozróżnienie pomiędzy dwoma głównymi typami 1

plików: katalogami i plikami zwykłymi (regularnymi). Wiedza na temat katalogu domowego użytkownika i jego skrótu ( ). Ścieżki do pliku określane są względem pewnego konkretnego miejsca w systemie plików. Zwykle jest to albo katalog główny systemu plików (root, czyli katalog ''/'') dla ścieżek bezwzględnych lub nasze obecne położenie (current/working directory, CWD) dla ścieżek względnych. Pewnym wyjątkiem są pliki dowiązań symbolicznych (o tym w następnym laboratorium). Jeśli plik znajduje się w naszym obecnym katalogu, to zwykle wystarcza odwołanie wprost: nazwa_pliku W przypadku, gdy plik znajduje się w innym katalogu trzeba użyć dłuższej ścieżki. Przykłady ścieżek: katalog/plik../katalog/plik /kat1/kat2/plik /kat1/kat2./plik Zauważmy, że katalog też jest plikiem. Specjalne nazwy plików ''.'' i ''..'' oznaczają, odpowiednio, aktualny katalog (CWD) oraz katalog nadrzędny (rodzic dla CWD). Zauważmy też, że dla normalnego użycia plików nie ma potrzeby używania ''.''. Przykładowo ścieżki: plik./plik./././plik są równoważne. Pliki ''.'' i ''..'' zostaną szerzej omówione podczas następnego laboratorium. Znak tyldy ( ) na początku ścieżki (i tylko na początku!) jest przez bash rozwijany do ścieżki bezwzglednej na katalog domowy użytkownika. Dla użytkownika user ścieżki: ~/plik /home/user/plik Są równoważne (o ile katalogiem domowym jest /home/user). Zauważmy jeszcze, że jeśli ostatnim elementem ścieżki jest katalog, to dodanie po nim znaku ukośnika jest opcjonalne. To znaczy poniższe ścieżki są równoważne: 2

sciezka/do/katalogu sciezka/do/katalogu/ Ponadto dublowanie znaku ukośnika nie jest błędem i wszystkie poniższe ścieżki: katalog/plik katalog//plik katalog////plik są poprawne (w tym sensie, że system operacyjny potrafi je zredukować do tej pierwszej). Jednakże poniższe dwie ścieżki: katalog/plik katalogplik NIE są równoważne. Wynika z tego uwaga praktyczna: przy budowie ścieżek należy zwracać uwagę czy w odpowiednich miejscach są ukośniki. Zdublowanie ukośnika dla pewności nie jest błędem (chyba, że ukośnik dodano w złym miejscu). Uwaga ta ma znaczenie głównie w przypadku zadań, gdzie budową ścieżek zajmuje się skrypt. 2. Umiejętność wywoływania komend wraz z użyciem argumentów i opcji komend. Normalne wywołanie komendy to ciąg znaków rozdzielonych białymi znakami (zwykle spacją), który występuje na początku linii (ewentualnie poprzedzony białymi znakami). Pierwszy wyraz to komenda do wykonania, a pozostałe wyrazy to argumenty. Przykładowo: komenda arg1 arg2 arg3 Nazwy komend są w istocie ścieżkami do plików, które należy wywołać. Jednakże w przypadku wywołania komend normalnie zabronione jest użycie wprost samej nazwy: komenda Takie użycie może spowodować wystąpienie błędu command not found. Pierwszym prostym i zalecanym rozwiązaniem tego problemu jest wywołanie z użyciem ścieżki, która zawiera więcej niż tylko końcową nazwę pliku:./komenda sciezka/wzgledna/komenda /sciezka/bezwzgledna/komenda 3

Drugim wyjściem jest umieszczenie komendy w katalogu, który domyślnie sprawdzany jest w poszukiwaniu komend (jeden z katalogów w treści zmiennej systemowej PATH). W ten sposób działają podstawowe komendy (takie jak echo, cat oraz sam bash), ponieważ katalogi, w którym się znajdują (zwykle /bin lub /usr/bin) znajdują się w zmiennej PATH. Dostęp do wspomnianych katalogów z kont studenckich jest zwykle niemożliwy, ale można stworzyć własny katalog skryptów (zwykle bin w katalogu domowym użytkownika), a następnie dodać go do zmiennej PATH 1. Opcje to pewne szczególne typy argumentów, zwykle podawane na początku i sterujące daną komendą. Większość komend linuksowych przyjmuje opcje w jednej lub obu z poniższych postaci: -o --opcja Pierwszy typ to opcja krótka, drugi to opcja długa. Część opcji przyjmuje osobne argumenty (opcjonalne lub wymagane): -oa --opcja argument --opcja=argument Komendy, które poprawnie implementują opcje długie pozwalają na używanie skrótów, o ile skróty te są jednoznaczne (w obrębie wszystkich opcji danej komendy): --jakas_opcja --jakas_opc --jakas --j Komendy, które poprawnie implementują opcje krótkie pozwalają na ich łączenie: -a -b -c -ab -c -abc Należy jednak uważać, gdy w grę wchodzą opcje z argumentem (opcja -a z argumentem b, to nie jest to samo co połączenie opcji -a i -b). 3. Umiejętność wywoływania skryptów basha, wliczając w to zdolność nadania uprawnień plikom z wykorzystaniem komendy chmod. Typowe użycie w celu nadania praw wykonania plikowi ma postać: 1 Więcej szczegółów na http://askubuntu.com/questions/402353/how-to-add-home-username-bin-to-path. 4

chmod u+x sciezka_do_pliku Wywołanie skryptu wygląda tak samo jak wywołanie zwykłej komendy: sciezka_do_skryptu lista argumentow Jeśli plik skryptu znajduje się w naszym aktualny katalog roboczym, to użycie sprowadza się do:./nazwa_skryptu lista argumentow Aby wywołanie skryptu w powyższy sposób się powiodło skrypt musi mieć prawo wykonania. Należy też na początku skryptu (PIERWSZA linijka, przed wszelkimi pustymi liniami i komentarzami) umieścić: #! sciezka/do/interpretera Dla skryptów bashowych ścieżką interpretera jest /bin/bash. Można też używać starszej powłoki sh (ścieżka /bin/sh). W późniejszych laboratoriach basha zastąpi perl (ścieżka /usr/bin/perl). Nie podanie interpretera będzie skutkowało użyciem interpretera domyślnego dla danego użytkownika lub dla danego systemu. W przypadku basha nie jest to duży problem (bash jest domyślną powłoką), ale w przypadku perla już tak. Drugim sposobem wywołania skryptu jest jawne wywołanie interpretera ze ścieżką skryptu jako argumentem np.: bash sciezka_do_skryptu Takie rozwiązanie jest mniej restrykcyjne (nie trzeba dodawać skryptowi praw wykonania, nie trzeba jawnie podawać interpretera, można używać prostej ścieżki skryptu), ale mniej autonomiczne. Na laboratorium preferujemy pierwsze rozwiązanie. 4. Znajomość zmiennych w powłoce bash, wliczając w to przypisanie wartości zmiennych i ich użycie. Zmienne w bashu można używać (przypisywać i odczytywać wartości) bez uprzedniej deklaracji. Należy pamiętać, że bash (jak każda inna komenda) dziedziczy początkowe wartości zmiennych po macierzystej komendzie. W związku z tym część zmiennych może od razu mieć jakąś wartość (w szczególności dotyczy to zmiennych systemowych). Przypisanie wartości zmiennej var ma postać: var=wartosc 5

Proszę zwrócić uwagę na BRAK spacji po obu stronach znaku równości. Użycie spacji (czyli zapis var = wartosc) spowodowałoby próbę wywołania komendy var z argumentami ''='' i ''wartosc''. Przypisana wartość jest normalnie traktowana jako tekst. Wykorzystanie wartości zmiennej wymaga użycia znaku dolara. Przykładowo wypisanie wartości zmiennej var (użycie komendy echo): echo $var Widzimy przy okazji, że bash sam w sobie nie zajmuje się wypisywaniem tekstu, lecz wykorzystuje do tego inne komendy (jak echo). Powłoka bash skleja teksty wprost bez żadnego operatora. Przykładowo: echo $var1$var2 Spowoduje wypisanie wartości obu zmiennych nierozdzielonych żadnym znakiem. Problem pojawia się, gdy chcemy, przykładowo, odróżnić wartość zmiennej jakasnazwa od wartości zmiennej jakas z doklejonym tekstem ''nazwa''. Rozwiązaniem jest użycie nawiasów klamrowych. Przykładowo porównajmy: echo ${jakas}nazwa echo $jakasnazwa echo ${jakasnazwa} Dwa ostatnie wywołania echo są w tym kontekście równoważne. 5. Przekazywanie argumentów do skryptów, ich weryfikacja i dostęp do nich. Powłoka bash pozwala na dostęp do argumentów skryptu poprzez szereg specjalnych zmiennych. Zmienne od $1 do $9 zawierają kolejne 9 argumentów skryptu. Dalsze argumenty wymagają użycia nawiasów klamrowych np. ${10} 2. Zmienna $0 przechowuje zerowy argument, czyli wywoływaną komendę (ściślej ścieżkę, która została użyta do jej wywołania). Zmienna $# przechowuje liczbę podanych argumentów (nie licząc $0). Zmienne $@ oraz $* zwracają wszystkie argumenty skryptu. Pierwsza z nich zwraca argumenty jako listę wyrazów, druga jako pojedynczy wyraz. Obie zmienne powinny być używane w cudzysłowach. Wszystkie skrypty powinni sprawdzać otrzymane argumenty (chyba, że skrypt zakłada całkowity brak argumentów). Zwykle wystarcza (w tej kolejności): 2 Można też posłużyć się komendą wbudowaną shift, ale nie jest to zalecane. 6

(a) sprawdzenie czy liczba otrzymanych argumentów jest co najmniej taka sama jak wymagana liczba argumentów, (b) sprawdzenie czy argumenty, które mają być plikami są istniejącymi plikami odpowiednich typów. Sprawdzenie zwykle odbywa się z użyciem konstrukcji if i polecenia test. W przypadku błędnych argumentów należy wypisać odpowiednią informację i zakończyć skrypt. 6. Znajomość cudzysłowów i apostrofów. Pewne znaki (m.in. znak zapytania, gwiazdka, nawiasy klamrowe, nawiasy okrągłe, cudzysłowy, apostrofy, tzw. backtick czy znak odwrotnego ukośnika) mają specjalne znaczenie w pewnych kontekstach i muszą zostać udosłownione by zostać użyte wprost. W tym celu można poprzedzić je znakiem ucieczki (\, czyli odwrotny ukośnik lub backslash). Do udosłowniania dłuższych tekstów służą apostrofy: echo 'doslowny $' Powyższa komenda potraktuje znak dolara jako zwykły znak. Domyślnie tekst w bashu dzielony jest na wyrazy i ulega interpretacji przez bash. W celu zamknięcia wielu wyrazów w jeden należy wykorzystać apostrofy lub cudzysłowy: komenda 'z jednym dlugim argumentem ze spacjami' komenda ''z jednym dlugim argumentem ze spacjami'' Jednakże powyższe przykłady NIE są równoważne. Wewnątrz apostrofów wszystkie znaki traktowane są dosłownie. Ponadto wewnątrz apostrofów nie mogą wystąpić inne apostrofy, nawet jeśli są poprzedzone backslashem! Wewnątrz cudzysłowów znaki $, ` oraz \ (a także @ i *) zachowują swoje specjalne znaczenie. Ponadto wewnątrz cudzysłowów mogą wystąpić apostrofy (ale są wtedy normalnymi znakami) i inne cudzysłowy (o ile są poprzedzone backslashem!). Uproszczone zastosowanie apostrofów i cudzysłowów obrazuje poniższa tabela: Przykład tekst1 tekst2 tekst3 ''tekst1 tekst2 tekst3'' 'tekst1 tekst2 tekst3' 'tekst1' 'tekst2' 'tekst3' Znaczenie Trzy wyrazy. Interpretacja: tak. Jeden wyraz. Interpretacja: tak. Jeden wyraz. Interpretacja: nie. Trzy wyrazy. Interpretacja: nie. 7

7. Użycie odwrotnych apostrofów tzw. backtick (znak `, zwykle ten sam klawisz na klawiaturze co znak tyldy). Pomimo podobieństwa odwrotne apostrofy pełnią zupełnie inną rolę niż zwykłe apostrofy lub cudzysłowy. Normalne wywołanie komendy charakteryzują dwie cechy. Po pierwsze, komendę można wywołać jedynie na początku linii. Ewentualnie można wykonać kilka komend w linii, jeśli oddzielone są one średnikiem. Normalnie nie można jednak wykonać komendy w taki sposób: for var in komenda argumenty W kontekście pętli for fragment komenda argumenty jest zwykłym dwuwyrazowym tekstem, a nie komendą. Aby wywołać w tym miejscu komendę należy użyć odwrotnych apostrofów: for var in `komenda argumenty` Odwrotne apostrofy powodują więc wywołanie komendy w miejscu ich użycia. Drugą cechą normalnej komendy, jest fakt, że standardowe wyjście komendy pojawia się na ekranie (jeśli go nie przekierowaliśmy w inny sposób). Odwrotne apostrofy modyfikują to zachowanie, sprawiając, że standardowe wyjście pojawia się tam, gdzie pierwotnie znajdowała się komenda. Innymi słowy kod: var=`cat file` spowoduje, że do zmiennej var zostanie przypisany wynik komendy cat file, czyli zawartość pliku file. Uwaga! W przypadku problemów z uzyskaniem znaku ` na klawiaturze można użyć alternatywnej składni $(komenda). 8. Wykorzystanie komendy test. Powłoka bash nie posiada sama w sobie warunków logicznych. Do ich testowania służy komenda test. Komenda ta ma dwie alternatywne postaci: test wyrazenie [ wyrazenie ] Formy te są praktycznie równoważne 3. Pierwszą uwagą jest fakt, że obie przedstawione powyżej formy są normalnymi komendami i obowiązują przy ich użyciu reguły takie jak spacje pomiędzy poszczególnymi argumentami. Poniższe wywołania są więc błędne: 3 Istnieje jeszcze konstrukcja [[ wyrazenie ]], ale nie jest ona tym samym co [ wyrazenie ]! 8

[2 = 3 ] [ 2 =3 ] Pierwsze spowoduje błąd nieznana komenda [2. Drugi zaś nie zostanie zrozumiany przez polecenie test (nieprawidłowy operator lub operand). Komenda test posiada szereg operatorów. Najważniejsze to: operatory plikowe. Przykładowo -f file zwraca prawdę, gdy ścieżka file wskazuje na istniejący plik regularny. operatory liczbowe (dla liczb całkowitych!). Używana jest w tym celu nieco nieintuicyjna składnia. Przykładowo, -eq oznacza równość, -gt oznacza większe, zaś -ge oznacza większe lub równe. operatory tekstowe. Wśród nich najważniejsze to A = B i A!= B, czyli odpowiednio równość i różność łańcuchów tekstowych. Podwójny znak równości, jako równoważność pojedynczego, zwykle jest wspierany, ale nie jest to gwarantowane! Poszczególne wyrażenia można łączyć za pomocą operatorów logicznych, negacji czy nawiasów, pamiętając jednak o wymaganych spacjach. Przykładowo: [ (! -f file1 ) -a ( $var = ''Ala'' -o $var2 -gt 3 ) ] Opcje -a i -o oznaczają odpowiednio logiczną koniunkcję (AND) i alternatywę (OR). Działają one jednak nieco inaczej niż w języku C/C++. W przypadku ich użycia oba wyrażenia po ich lewej i prawej stronie zostaną wykonane (zwartościowane) niezależnie od wyniku pierwszego z nich. Przykładowo, w takim przypadku: [ komenda1 -o komenda2 ] komenda2 zostanie wykonana niezależnie od wyniku wykonania komenda1. Aby uzyskać efekt znany z języka C/C++ można wykorzystać konstrukcje && (dla AND) oraz (dla OR), pamiętając jednak, że są to konstrukcje basha, a nie testa: [ -f file1 -a -f file2 ] # ok [ -f file1 ] && [ -f file2 ] # ok, choć nie równoważnie [ -f file1 && -f file2 ] # źle Przy okazji: pojedyncza komenda może być użyta jako wartość logiczna, ale należy pamiętać, że konwencja jest odwrotna niż dla C/C++ tzn. wynik komendy równy 0 oznacza wartość TRUE (komenda wykonana pomyślnie), a wartość różna od 0 oznacza FALSE (błąd). 9

9. Użycie konstrukcji warunkowej if-else. Powłoka bash posiada konstrukcję if-else, której ogólna składnia jest następująca: if warunek1 then komendy elif warunek2 then komendy else komendy fi Sekcje elif oraz sekcja else są opcjonalne. Słowa elif, then, else i fi są traktowane jak komendy, więc jeśli nie zaczynają linii, to muszą być poprzedzone średnikiem: if warunek; then komenda1; else komenda2; fi Warunkiem jest dowolne wyrażenie logiczne. Zwykle jest to komenda test: if [ $var -gt 3 ] then echo zmienna var jest większa od 3 else echo zmienna var nie jest większa od 3 fi Poszczególne sekcje mogą zawierać wiele komend, ale nie mogą być puste. 10. Rozumienie list. Listą jest ciąg wyrazów oddzielonych białym znakiem. Przykładowo, w zmiennej $@ jest lista argumentów skryptu. Inny przykład utworzenia listy na bieżąco : var=ala var=$var'' ma'' var=$var'' kota ' Po zakończeniu zmienna var jest listą ''Ala ma kota''. 11. Zrozumienie pętli for. Pętla ta ma następującą składnię: for zmienna in lista do komendy done 10

Słowa do i done muszą być poprzedzone średnikiem jeśli nie są na początku linii (analogicznie jak w przypadku if-else). Pętla for wykonuje się tyle razy ile jest wyrazów na podanej liście. Z każdym przebiegiem pętli zmienna var przyjmie wartość kolejnego wyrazu z listy. Przykładowo, konstrukcja: zdanie=''ala ma kota'' for var in zdanie; do echo $var done powinna dać w wyniku: Ala ma kota Do stworzenia listy wykorzystuje się zwykle: komendę cat, która wypisuje zawartość plik(ów). Pętla wykona się tyle razy ile jest wyrazów w podanym pliku/plikach. komendę ls, która listuje pliki z podanego katalogu. Pętla wykona się tyle razy ile jest plików (uwaga na spacje w nazwach plików!). komendę seq, która wypisuje liczby. Przykładowo for var in `seq 1 10`; do echo $var done Wykona się 10 razy, bo seq 1 10 zwraca dziesięć liczb od 1 do 10. W każdym z powyższych przypadków należy pamiętać o odwrotnych apostrofach, w celu wywołania komendy w nagłówku pętli. 3 Przydatne komendy Poniżej znajduje się lista przydatnych i często używanych komend. Część z nich będziemy używać głównie poza skryptem w celach poruszania się po systemie plików lub przygotowania danych testowych. echo wypisuje tekst. Posiada przydatne opcje -n oraz -e. ls listuje zawartość katalogów (końcowe nazwy plików, a nie pełne ścieżki!). Posiada bardzo dużą liczbę opcji, ale tylko niektóre (jak -l lub -1) będą przydatne w czasie laboratorium. 11

rm, rmdir, mkdir, mv, cp komendy do, kolejno, 1) usuwania plików (domyślnie nie usuwa katalogów), 2) usuwania (pustych) katalogów, 3) tworzenia katalogów, 4) zmieniania nazw plików (ogólniej: przenoszenia plików) oraz 5) kopiowania plików. touch szturchnięcie które zmienia czasy pliku takie jak czas ostatniego dostępu lub ostatniej modyfikacji. Ma efekt uboczny w postaci tworzenia pliku regularnego, jeśli wskazany plik nie istnieje. Z tego powodu jest używana do bezpiecznego tworzenia plików regularnych. head, tail, cat. Komendy wypisujące zawartość pliku. Komenda head wypisuje początek pliku, zaś tail jego koniec. Komenda cat 4 łączy podane pliki przed ich wypisaniem. pwd wypisuje wartość CWD jako ścieżkę bezwzględną. Rzadko używana (zwykle z powodu nieznajomości lepszych rozwiązań). Wbrew dosyć powszechnej opinii pwd nie przyjmuje żadnych argumentów i podaje tylko i wyłącznie ścieżkę do naszego aktualnego położenia w systemie plików. cd zmiana aktualnego katalogu (zmienia CWD). Użyta bez argumentów przenosi do katalogu domowego. Zaawansowane użycie pozwala przejść do ostatnio odwiedzonego katalogu. expr, let podstawowe komendy do wykonywania obliczeń arytmetycznych (np. zwiększanie wartości liczników), jako że bash sam w sobie nie posiada operatorów arytmetycznych. 4 Synonimy komend Niektóre komendy i konstrukcje mają swoje alternatywne formy. O części z nich wspomniano wcześniej. Komendy test i [ są praktycznie synonimami. Ta druga wymaga jednak obecności zamykającego nawiasu ]. Konstrukcja [[ ]] jest podobna, ale nie równoważna. Konstrukcja `komenda` może zostać zastąpiona przez $(komenda). Zamiast `expr wyrazenie` można użyć składni $[wyrazenie] lub $((wyrazenie)). Jest to wygodne, ponieważ komenda expr wymaga spacji w odpowiednich miejscach i znaku dolara przy wartościach zmiennych. Alternatywne formy nie mają tych ograniczeń, tak więc poniższe przypisania są równoważne: wynik=`expr $zmienna + 3` wynik=$[zmienna+3] wynik=$((zmienna+3)) 4 Nie mylić z komendą cut! 12