Środowisko programisty Zestaw 7

Podobne dokumenty
System operacyjny Linux

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

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

Pracownia Komputerowa wykład III

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Systemy operacyjne 11

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

1 Przygotował: mgr inż. Maciej Lasota

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Wstęp do Informatyki dla bioinformatyków

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

Powłoka (shell) Powłoka ksh

Skrypty powłoki w systemie Linux

Powłoka bash. Kurs systemu Unix 1

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

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

Podstawy Programowania C++

Programowanie skryptów powłoki

Technologie Informacyjne - Linux 3

PODSTAWY INFORMATYKI

pico mojskrypt bash mojskrypt chmod +x mojskrypt./mojskrypt

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

Interpreter poleceń oraz zmienne środowiskowe

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

- wszystkie elementy - wszystkie elementy

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

Wprowadzenie do programowania w powłoce

Podstawy programowania w Bash'u

Powłoka interpreter poleceń systemu UNIX

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Laboratorium Ubuntu Linux.

Bash - instrukcje warunkowe, pętle i funkcje

Strona1. Linux. Skrypty powłoki

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

1 Podstawy c++ w pigułce.

POPULARNE POLECENIA SKRYPTY. Pracownia Informatyczna 2

Ćwiczenie 1. Wprowadzenie do programu Octave

LibreOffice Calc VBA

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

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

Tworzenie skryptu: Skrypty powłoki

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

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

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

2.5 Podstawy programowania w bash'u

Programowanie w BASH u Skrypt do ćwiczeń

Ćwiczenie 1. Wprowadzenie do programu Octave

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Pętla for. Wynik działania programu:

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

Bash i algorytmy. Elwira Wachowicz. 20 lutego

System operacyjny Linux

Wprowadzenie do Scilab: podstawy języka Scilab

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Przetwarzanie sygnałów

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Linuks skrypty Część teoretyczna

Wprowadzenie do programowania shella (bash)

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

BASH - WPROWADZENIE Bioinformatyka 4

Programowanie w języku Python. Grażyna Koba

Trochę o plikach wsadowych (Windows)

Bloki anonimowe w PL/SQL

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

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

Programowanie w Turbo Pascal

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

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

Pętle. Dodał Administrator niedziela, 14 marzec :27

Bash, skrypty. Wojciech Dudek. 15 listopada Uniwersytet Warszawski

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

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

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach

Zapis algorytmów: schematy blokowe i pseudokod 1

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Programowanie w Bashu

Wykresy i interfejsy użytkownika

JAVA?? to proste!! Autor: wojtekb111111

PRACOWNIA INFORMATYCZNA CHARAKTERYSTYKA PRZEDMIOTU BASH - PODSTAWOWE INFORMACJE

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

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Ćwiczenie nr 14: System Linux

1 Podstawy c++ w pigułce.

Zmienne środowiskowe: Ścieżka przeszukiwana komendą.

Wstęp do systemów wielozadaniowych laboratorium 19 awk

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

K. Konopko; Skrypty powłoki. Skrypty powłoki. dr inż. Krzysztof Konopko

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Programowanie robota mobilnego E-puck w języku Python

Umieszczanie kodu. kod skryptu

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Kurs pisania skryptów w powłoce BASH

Transkrypt:

Bash, zmienne i instrukcje warunkowe Zmienne możemy traktować jak etykiety, które przechowują ciągi znaków. Definiujemy je przy pomocy znaku = bez spacji po obu jego stronach: dog="azor" Do zmiennych w poleceniach odwołujemy się poprzedzając je symbolem $. Okazuje się, że to, czy nazwę zmiennej umieścimy pomiędzy apostrofami, czy też cudzysłowami, ma znaczenie cudzysłów umożliwia specjalną interpretację znaku $. echo $dog Azor echo $dogek echo ${dog}ek Azorek echo Jestem $LOGNAME, a to jest pies $dog. Jestem $LOGNAME, a to jest pies $dog. echo "Jestem $LOGNAME, a to jest pies $dog." Jestem boraks, a to jest pies Azor. Powyżej pojawiła się, zawierająca nazwę użytkownika, zmienna LOGNAME jedna ze zmiennych środowiskowych. Są to zmienne, których zawartość jest dostępna dla wszystkich procesów uruchomionych w powłoce. Ich nazwy zapisujemy dużymi literami. Przykłady innych zmiennych środowiskowych: HOSTNAME nazwa (adres) maszyny, na którą się zalogowaliśmy, HOME ścieżka do katalogu domowego użytkownika, PATH ścieżki (oddzielone dwukropkami), w których szukane są programy powłoki, PWD ścieżka do aktualnego katalogu. Wszystkie zmienne środowiskowe możemy wypisać komendą env (choć nie jest to jej główne przeznaczenie patrz man env). W praktyce opłaca się nam często zmodyfikować zmienną PATH w pliku ~/.bashrc w celu szybkiego uruchamiania naszych programów (skryptów) z danego katalogu: PATH=$PATH:$HOME/scripts Jeżeli w katalogu scripts znajdował się program o nazwie cmd, to od tej pory będziemy go mogli uruchomić w dowolnym miejscu wpisując po prostu cmd. Z poprzednich notatek wiemy, że do nazwy skryptu możemy się dostać za pomocą: "$0". Natomiast do kolejnych argumentów przekazanych do skryptu za pomocą: "$1", "$2", "$3", itd., itp. Do listy parametrów możemy dostać się za pomocą $@, do liczby parametrów za pomocą: $#. Strona 1/9

Wyrażenia regularne oraz glob patterns w bashu Bash używa rozszerzonych wyrażeń regularnych, czyli extended regular expressions (ERE), z którymi mamy do czynienia np. uruchamiając grepa z flagą -E Glob patterns (w skrócie globy) to wzorce (wyrażenia) w bashu, które dopasowują się do nazw plików lub innych ciągów snaków. Szczególnie przydatne są w pierwszym przypadku. Podobnie jak w przypadku omawianych wcześniej wyrażeń regularnych, Globy oprócz zwykłych znaków używają również specjalnych meta-znaków. Są to: * dopasowuje się do dowolnego ciągu znaków włączając w to słowo puste? dopasowuje się do dowolnego pojedynczego znaku [...] dopasowuje się do dowolnego znaku w nawiasach kwadratowych Globy w przeciwieństwie do wyrażeń regularnych omawianych wcześniej są domyślnie "zakotwiczone z obu stron". W szczególności a* nie dopasuje się do ciągu: katastrofa. Dopasuje się natomiast do: aerobik. Natomiast ka* dopasuje się do słowa katastrofa. Globa *.c można wykorzystać np. do wypisania wszystkich plików żródłowych w C w danym katalogu. Używamy do tego komendy echo: echo *.c. W przypadku, kiedy glob jest używany do dopasowywania nazw plików ani *, ani? nie dopasowują się do slasha (/). Testowanie warunków logicznych w bashu Polecenie test warunek_1 operator warunek2 sprawdza wartość wyrażenia. Polecenie test może być zapisane za pomocą nawiasów kwadratowych, które tak naprawdę są aliasem do tego polecenia: [ wyrażenie1 operator wyrażenie2 ] Należy pamiętać, że po [ oraz przed ] spacja jest wymagana. Uwaga ta dotyczy również podwójnych nawiasów kwadratowych [[ ]] omawianych poniżej. Operacje arytmetyczne: -eq -ne -lt -le -gt -ge równy różny mniejszy niż mniejszy lub równy większe niż większe lub równy Operacje na stringach: Strona 2/9

= równy!= różny < pierwszy string alfabetycznie przed drugim > pierwszy string alfabetycznie za drugim -n string ma długość większą niż 0 -z string ma zerową długość Przykładowe operacje na plikach: -e PLIK zwraca true jeśli PLIK isntieje -s PLIK zwraca true jeśli PLIK isntieje i jest niepusty -d PLIK zwraca true jeśli PLIK jest katalogiem -r PLIK zwraca true jeśli użytkownik ma prawo do czytania PLIK1 -nt PLIK2 zwraca true jeśli PLIK1 jest nowszy niż PLIK2 Łączenie wyrażeń odbywa się przez alternatywę lub koniunkcję &&: warunek1 warunek2 warunek3... warunek1 && warunek2 && warunek3... Wyrażenia są sprawdzane po kolei, aż do momentu kiedy da się już określić wartość logiczną całego wyrażenia. Dlatego alternatywa wykonuje się do momentu gdy jakieś wyrażenie zwróci TRUE albo do końca i jeśli wszystkie wyrażenia dadzą FALSE to cała alternatywa też będzie fałszywa. Natomiast koniunkcja odwrotnie, przerywana jest w momencie gdy jakieś wyrażenie zwróci FALSE, a jeśli nie to wykonuje się do końca i jeśli wszystkie wyrażenia dadzą TRUE to koniunkcja będzie prawdziwa. Obok komendy [ ] bash oferuje komendę [[ ]], która daje więcej możliwości. W szczególności w podwójnych kwadratowych nawiasach możemy umieścić następujące warunki: [[ NAPIS = (lub ==) GLOB ]] zwraca true, jeśli NAPIS dopasowuje się do globa GLOB [[ NAPIS!= GLOB ]] zwraca false, jeśli NAPIS NIE dopasowuje się do globa GLOB [[ NAPIS =~ REGEX ]] zwraca true, jeśli NAPIS dopasowuje się do wyr. reg. REGEX Instrukcje sterujące W bash-u występują dwie instrukcje warunkowe if then else się ich składni. oraz case. Przyjrzyjmy if [ warunek ] ; then polecenia elif [ warunek ] ; then polecenia else polecania Strona 3/9

fi Instrukcja else jest opcjonalna i nie musi być używana. To samo dotyczy elif, która zastępuje else if (warunek), jak to piszemy używając np. C,C++. Instrukcja if musi być zakończona przez fi. Przykład sprawdzający pierwszy czy argument skryptu jest równa zeru: if [ $1 -eq 0 ] ; then echo "$1 jest równe zeru" else echo "$1 jest różne od zera" fi W instrukcji warunkowej zamiast pojedynczych ([]) możemy użyć również podwójnych nawiasów kwadratowych [[]]. Pierwszy przykład pokazuje jak w tym kontekście używać globów a drugi jak wyrażeń regularnych. filename="somefile.jpg" if [[ $filename = *.jpg ]]; then echo "$filename is a jpeg" fi W powyższym przykładzie sprawdziliśmy, czy plik ma rozszerzenie jpg. W kolejnym sprawdzamy, czy pierwszy argument podany do skryptu jest liczbą. liczba=^[1-9][0-9]*$ if [[ $1 =~ $liczba ]]; then echo "$1 jest liczbą" fi Gdy musimy dla kolejnych wartości zmiennej wykonywać różne akcje, instrukcja if staje się niewygodna w użyciu. Do takich rozwiązań służy instrukcja case o następującej składni: case zmienna in "wzorzec") polecenie ;; "wzorzec") polecenie ;; "wzorzec") polecenie ;; *) polecenie wykonywane domyślnie esac Strona 4/9

W instrukcji case ilość wzorców może być dowolna. Przykład wypisujący odpowiednią informację zależną od pierwszego argumentu programu: case $1 in "0") echo "Jest OK" ;; "1") echo "Jest lepiej" ;; "2") echo "Jest jeszcze lepiej" ;; "3") echo "Jest super" ;; *) echo "Przesadzasz!" esac W bash-u istnieją kilka rodzajów pętli: for, while, until oraz select. Omówimy tutaj pierwsze trzy z nich. Pętla while wykonuje swoje działanie dopóki warunek jest spełniony: while [ warunek ] ; do polecenie Przykład użycia, wypisanie 10 razy zmiennej i: i=1; while [ $i -le 10 ] ; do echo "$i" i=$[i + 1] Pętla until różni się od poprzedniej tym że kończy swoje działanie w momencie gdy warunek stanie się prawdziwy: until [ warunek ] ; do polecenie Przykład użycia, wypisanie 10 razy zmiennej i: i=0 until [ $i -ge 10 ] ; do echo "$i" i=$[i + 1] Strona 5/9

Pętla for jest najciekawsza z bash-owych pętli, ponieważ może być używana na dwa sposoby. Po pierwsze możemy jej używać tak jak w C\C++, kiedy znamy ograniczenie na ilość iteracji: for ((inicjalizacja zmiennej; warunek zakończenia; zmiana zmiennej)) ; do polecenia Przykład, wypisanie 10 razy wartości zmiennej i: for (( i=1; $i <= 10; i++ )) ; do echo " Iteracja nr: $i" Drugie to iterowanie się po pewnej liście zbiorze elementów: for zmienna in lista ; do polecenia Przykład, wypisanie wszystkich małych liter alfabetu angielskiego: for i in {a..z} ; do echo $i Przykład, wypisanie nazw wszystkich plików z rozszerzeniem txt w bieżącym katalogu: for i in *.txt ; do echo $i Aby przerwać działanie pętli uzywamy komendy break. Natomiast aby przeskoczyć do kolejnej iteracji służy polecenie continue. Strona 6/9

Tablice Poniżej przedstawiamy kilka sposobów na tworzenie tablic. Pierwszy przykład tworzy tablicę taką, że: names[0] = "Bob", names[1] = "Peter", itd. Tak, tablice numerujemy od zera. names=("bob" "Peter" "$USER" "Big Bad John") Możemy również podać konkretne indeksy do których chcemy przypisać wartości. names=([0]="bob" [1]="Peter" [20]="$USER" [21]="Big Bad John") W przypadku, kiedy chcemy wypełnić tablicę nazwami plików, rekomenduje się użycie globów. photos=(~/"my Photos"/*.jpg) W następnych przykładach używamy tablic z pętlą for. Używamy do tego konstrukcji: ${tablica[@]}, która tworzy listę zawierającą elementy tablicy. Pierwsze dwa przykłady dają ten sam efekt. names=("bob" "Peter" "$USER" "Big Bad John") for name in "${names[@]}"; do echo "$name"; for name in "Bob" "Peter" "$USER" "Big Bad John"; do echo "$name"; Kolejny przykład operuje na nazwach plików, które możemy wczytać do tablicy za pomocą globa. for file in "${myfiles[@]}"; do cp "$file" /backups/ Do liczby elementów w tablicy możemy dostać się za pomocą: ${#array[@]}. Natomiast ${!arrayname[@]} zwraca listę indeksów. Strona 7/9

Wczytywanie danych ze standardowego wejścia Prostą komendą czytającą pojedynczą linię wejścia jest read -opcje nazwa_zmiennej_do_której_czytamy. Przykład, wczytywanie napisów i łączenie ich w jeden: while read zmienna do napis=$napis" "$zmienna echo $napis Aby czytać i zapisywać do pliku możemy użyć przekierowania: <, >. W poniższym przykładzie czytamy z pliku: plik.in i zapisujemy do pliku: plik.out while read zmienna do napis=$napis" "$zmienna < plik.in echo $napis > plik.out Ewaluacja wyrażeń arytmetycznych w bashu Istnieje wiele sposobów na wyliczanie wartości wyrażenia w bash-u. Zwykłe wpisanie ich w instrukcji echo jednak nie wystarczy. Umieszczenie wyrażenia pomiędzy nawiasami: $((wyrażenie)) wykona je, ale jest ograniczone tylko do liczb całkowitych. echo "2+2" 2+2 echo $((7+7)) 14 Aby wykonać wyrażenia zmiennoprzecinkowe używamy polecenia bc -l: echo "2+2" bc 4 Strona 8/9

echo "3+5.5" bc -l 8.5 echo "2/5" bc 0 echo "2/5" bc -l.40000000000000000000 Używając parametru scale możemy określić liczbę liczb po przecinku, nie musimy wtedy używać -l. Należy jednak pamiętać, że ważna jest kolejność wyrażeń! echo "scale = 4; 11 * 110 / 70" bc 17.2857 echo "scale = 4; 11 / 70 * 110" bc 17.2810 echo "scale = 4; (11 / 70) * 110" bc 17.2810 Strona 9/9