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

Podobne dokumenty
PODSTAWY INFORMATYKI

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

1 Przygotował: mgr inż. Maciej Lasota

Pracownia Komputerowa wykład III

Systemy operacyjne 11

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Wprowadzenie do programowania w powłoce

Programowanie w BASH u Skrypt do ćwiczeń

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

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

Skrypty powłoki w systemie Linux

Technologie Informacyjne - Linux 3

System operacyjny Linux

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

#Tu jest komentarz. fi case. until while { } time [ ] for do. function done. if elif. in else. select esac. then

Laboratorium 5 Podstawy budowy skryptów w systemie UNIX cz. 1

pico mojskrypt bash mojskrypt chmod +x mojskrypt./mojskrypt

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Tworzenie skryptu: Skrypty powłoki

Interpreter poleceń oraz zmienne środowiskowe

Systemy operacyjne 10

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

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

Środowisko programisty Zestaw 7

Laboratorium Ubuntu Linux.

Powłoka (shell) Powłoka ksh

Pracownia Komputerowa wykład III

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

Powłoka interpreter poleceń systemu UNIX

Programowanie skryptów powłoki

Powłoka bash. Kurs systemu Unix 1

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

11. Wstęp do skryptów w Linuxie

Podstawy programowania w Bash'u

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

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

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

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

Strona1. Linux. Skrypty powłoki

POPULARNE POLECENIA SKRYPTY. Pracownia Informatyczna 2

Wstęp do Informatyki dla bioinformatyków

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

PODSTAWY INFORMATYKI

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

Kurs pisania skryptów w powłoce BASH

Programowanie w języku Python. Grażyna Koba

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

Pracownia Komputerowa wyk ad III

Filtry, metaznaki, cytowania. Proste skrypty. Polecenia find, tee, mail.

Podstawy programowania skryptów Sh

1 Podstawy c++ w pigułce.

Przekierowanie wejścia wyjścia:

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

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Umieszczanie kodu. kod skryptu

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

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

Ćwiczenie nr 14: System Linux

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

Podstawy informatyki

Wprowadzenie do programowania shella (bash)

1 Podstawy c++ w pigułce.

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

Bloki anonimowe w PL/SQL

Systemy operacyjne Programowanie w języku powłoki sh

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

5. Linux - powłoka Kilka słów o powłoce Zmienne systemowe

- wszystkie elementy - wszystkie elementy

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

Linuks skrypty Część teoretyczna

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

2.5 Podstawy programowania w bash'u

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

Wstęp do systemu Linux

PRACOWNIA INFORMATYCZNA CHARAKTERYSTYKA PRZEDMIOTU BASH - PODSTAWOWE INFORMACJE

Wstęp do systemu Linux

Systemy operacyjne / Programowanie w języku powłoki sh str.1/19

Czas już najwyższy na przykład: "Napisz program który wypisze słowo podane w parametrze, obecny czas oraz nazwę użytkownika uruchamiającego skrypt"

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

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Technologie Informacyjne - Linux 2

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I

JAVA?? to proste!! Autor: wojtekb111111

Znaki globalne w Linuxie

Programowanie w Bashu

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

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

Ćwiczenie 1. Wprowadzenie do programu Octave

Pascal - wprowadzenie

Zapis algorytmów: schematy blokowe i pseudokod 1

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Podstawy Programowania C++

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ć

Pracownia komputerowa. Dariusz wardecki, wyk II

Część 4 życie programu

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

KARTA KURSU. Języki skryptowe

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.

Transkrypt:

Systemy operacyjne Programowanie w shellu: BASH dr inż. Andrzej Opaliński pawilon B5/p.406 tel. (+48)12 617 46 37 e-mail: andrzej.opalinski@agh.edu.pl Wydział Inżynierii Metali i Informatyki Przemysłowej

Jak efektywnie zarządzać systemem operacyjnym? Każdy system operacyjny ma do spełnienia dwa podstawowe cele: zapewnienie wygodnej pracy użytkownikom, efektywne zarządzanie zasobami systemu komputerowego. Cele te pozostają niestety w sprzeczności ze sobą. Im bardziej system jest przyjazny oferując użytkownikom więcej udogodnień, tym więcej zasobów sam zużywa zamiast je udostępniać. Dotyczy to w szczególności zasobów pamięci operacyjnej i dyskowej oraz wykorzystania procesora.

BASH i SKRYPTY BASH (ang. Bourne Again SHell) to najbardziej popularna powłoka używana na systemach unixowych, jest też skryptowym językiem programowania, umożliwiającym efektywne zarządzanie systemem. Co to jest skrypt? Skrypt to nieskompilowany tekstowy plik wykonywalny, zawierający polecenia systemowe oraz polecenia sterujące jego wykonaniem. Wykonywany jest tylko i wyłącznie przez interpreter (np./bin/bash), który tłumaczy polecenia zawarte w skrypcie na język zrozumiały dla procesora.

Pierwszy skrypt Tworzymy nasz plik który będzie zawierał nasz kod: touch pierwszyskrypt Następnie za pomocą dowolnego edytora ASCII (mcedit, vi, itp.) należy wpisać do niego następującą zawartość: #Tu jest komentarz. echo Mój pierwszy skrypt" Znak # (hasz) oznacza komentarz, wszystko co znajduje się za nim w tej samej linii, jest pomijane przez interpreter. Pierwsza linia skryptu zaczynająca się od znaków: #! ma szczególne znaczenie - wskazuje na rodzaj shella w jakim skrypt ma być wykonany, tutaj skrypt zawsze będzie wykonywany przez interpreter poleceń /bin/bash, niezależnie od tego jakiego rodzaju powłoki w danej chwili używamy.

Pierwszy skrypt echo "Witaj swiecie" Wydrukuje na standardowym wyjściu (stdout) czyli na ekranie napis: Witaj swiecie. Aby móc uruchomić skrypt należy mu jeszcze nadać atrybut wykonywalności za pomocą polecenia: chmod +x pierwszyskrypt Jeśli katalog bieżący w którym znajduje się skrypt nie jest dopisany do zmiennej PATH, to nasz skrypt możemy uruchomić w ten sposób:./ pierwszyskrypt

Polecenie echo Polecenie echo służy do wydrukowania na standardowym wyjściu (stdout - domyślnie jest to ekran) napisu. Składnia: echo -ne napis echo "napis" #wydrukuje tekst na ekranie Można też pisać do pliku. W tym wypadku echo wydrukuje tekst do pliku, ale zmaże całą jego wcześniejszą zawartość, jeśli plik podany na standardowym wyjściu nie istnieje, zostanie utworzony. echo "napis" > plik Tutaj napis zostanie dopisany na końcu pliku, nie zmaże jego wcześniejszej zawartości. echo "napis" >> plik

Polecenie echo Parametry: -n nie jest wysyłany znak nowej linii -e włącza interpretacje znaków specjalnych takich jak: \b backspace \r znak nowej linii \t tabulacja pozioma \v tabulacja pionowa

Słowa zastrzeżone Słowa zastrzeżone (ang. reserved words) mają dla powłoki specjalne znaczenie gdy nie są cytowane:! case do done elif else esac fi for function if in select then until while { } time [ ]

Cytowania cudzysłów " " Między cudzysłowami umieszcza się tekst, wartości zmiennych zawierające spacje. Cudzysłowy zachowują znaczenie specjalne trzech znaków: $ wskazuje na nazwę zmiennej, umożliwiając podstawienie jej wartości \ znak maskujący ` ` odwrotny apostrof, umożliwia zacytowanie polecenia

Cytowania x=2 echo "Wartość zmiennej x to $x" #wydrukuje Wartość zmiennej x to 2 echo ne echo "Polecenie date pokaże: `date`"

Cytowania apostrof ' ' Wszystko co ujęte w znaki apostrofu traktowane jest jak łańcuch tekstowy, apostrof wyłącza interpretowanie wszystkich znaków specjalnych, traktowane są jak zwykłe znaki.

echo '$date' #nie wypisze daty Cytowanie

Cytowanie odwrotny apostrof ` ` Umożliwia zacytowanie polecenia, bardzo przydatne jeśli chce się podstawić pod zmienną wynik jakiegoś polecenia

Cytowanie x=`ls -la $pwd` echo $x #pokaże listę plików w katalogu

Cytowanie znak maskujący backslash \ Wyłącza interpretacje przez powłokę danej zmiennej. echo "$HOME" #wydrukuje /home/linux echo \$HOME #wydrukuje napis $HOME

Zmienne programowe nazwa_zmiennej="wartość" zmienna= AGH" echo $zmienna zmienna = AGH" #zapis błędny, nie należy używać spacji

Zmienne programowe Pod zmienną możemy podstawić wynik jakiegoś polecenia, można to zrobić na dwa sposoby: GDZIE_JESTEM=`pwd` echo "Jestem w katalogu $GDZIE_JESTEM" lub: GDZIE_JESTEM=$(pwd) echo "Jestem w katalogu $GDZIE_JESTEM"

Zmienne specjalne Najbardziej prywatne zmienne powłoki, są udostępniane użytkownikowi tylko do odczytu. $0 nazwa bieżącego skryptu lub powłoki. echo "$0" $$ PID procesu bieżącej powłoki.

Zmienne specjalne $1..$9 Parametry przekazywane do skryptu. echo "$1 $2 $3" Jeśli wywołamy skrypt z jakimiś parametrami to przypisane zostaną zmiennym: od $1 do $9.

Zmienne specjalne $@ Pokaże wszystkie parametry przekazywane do skryptu, równoważne $1 $2 $3..., jeśli nie podane są żadne parametry $@ interpretowana jest jako nic. echo "Skrypt uruchomiono z parametrem: $@" plik a Skrypt uruchomiono z parametrem a

Zmienne środowiskowe globalne - widoczne w każdym podshellu lokalne - widoczne tylko dla tego shella w którym został ustawione export x="napis" # zmienna widoczna w wszystkich podshellach

Zmienne środowiskowe Przykłady zmiennych środowiskowych: $HOME #ścieżka do twojego katalogu domowego $USER #twój login $HOSTNAME #nazwa twojego hosta $OSTYPE #rodzaj systemu operacyjnego

Zmienne tablicowe BASH pozwala na stosowanie zmiennych tablicowych jednowymiarowych. Kolejne wartości zmiennej tablicowej indeksowane są przy pomocy liczb całkowitych, zaczynając od 0. tablica=(element1 element2 element3) echo ${tablica[0]} echo ${tablica[1]} echo ${tablica[2]}

Zmienne tablicowe Odwołanie do elementów tablicy. ${nazwa_zmiennej[wskaźnik]} Wskaźnikami są indeksy elementów tablicy, począwszy od 0 do n oraz @, *. Gdy odwołując się do zmiennej nie podamy wskaźnika: ${nazwa_zmiennej} to nastąpi odwołanie do elementu tablicy o indexie 0. Jeśli wskaźnikiem będą: @ lub * to zinterpretowane zostaną jako wszystkie elementy tablicy, w przypadku gdy tablica nie zawiera żadnych elementów to zapisy: ${nazwa_zmiennej[wskaźnik]} są interpretowane jako nic.

Zmienne tablicowe tablica=(element1 element2 element3) echo ${tablica[*]} #skrypt o takim samym działaniu jak na poprzednim slajdzie

Zmienne tablicowe Można też uzyskać długość (liczbę znaków) danego elementu tablicy: ${#nazwa_zmiennej[wskaźnik]} tablica=(wartosc1 wartosc2) echo ${#tablica[0]} Polecenie echo ${#tablica[0]} wydrukuje liczbę znaków z jakich składa się pierwszy element tablicy: wartosc1 wynik to 8.

Zmienne tablicowe Możemy także otrzymać liczbę wszystkich elementów tablicy, wystarczy jako wskaźnik podać: @ lub *. tablica=(wartosc1 wartosc2) echo ${#tablica[@]} Co da nam wynik: 2.

Zmienne tablicowe Dodawanie elementów do tablicy. nazwa_zmiennej[wskaźnik]=wartość tablica=(wartosc1 wartosc2) tablica[2]=wartosc3 echo ${tablica[@]}

Zmienne tablicowe Usuwanie elementów tablic i całych tablic. unset nazwa_zmiennej[wskaźnik] tablica=(wartosc1 wartosc2) echo ${tablica[@]} unset tablica[1] echo ${tablica[*]} Aby usunąć całą tablicę wystarczy podać jako wskaźnik: @ lub *.

Strumienie danych Przełączanie standardowego wyjścia Wynik jakiegoś polecenia można wysłać do pliku, a nie na ekran, do tego celu używa się operatora: > plik ls -la /usr/bin > ~/wynik Rezultat działania polecenia ls -la /usr/bin trafi do pliku o nazwie wynik, jeśli wcześniej nie istniał plik o takiej samej nazwie, to zostanie utworzony, jeśli istniał cała jego poprzednia zawartość zostanie nadpisana. Jeśli chcemy aby dane wyjściowe dopisywane były na końcu pliku, bez wymazywania jego wcześniejszej zawartości, stosujemy operator: >> plik

Strumienie danych Przełączanie standardowego wyjścia błędów Do pliku można też kierować strumień diagnostyczny: 2> plik echo "Stderr jest skierowane do pliku error" ls -y 2> ~/error #błąd

Instrukcja warunkowa IF if warunek then polecenie fi if warunek then polecenie1 else polecenie2 fi if [ -e ~/.bashrc ] then echo "Masz plik.bashrc" fi if [ -e ~/.bashrc ] then echo "Masz plik.bashrc" else echo "Nie masz pliku.bashrc" fi

Instrukcja warunkowa IF if warunek then polecenie1 elif warunek then polecenie2 fi if [ -x /opt/kde/bin/startkde ] then echo "Masz KDE w katalogu /opt elif [ -x /usr/bin/startkde ] then echo "Masz KDE w katalogu /usr" elif [ -x /usr/local/bin/startkde ] then echo "Masz KDE w katalogu /usr/local" else echo "Nie wiem gdzie masz KDE" fi

Instrukcja warunkowa IF Polecnie test zwraca wartość 0 (true) jeśli warunek jest spełniony i wartość 1 (false) jeśli warunek nie jest spełniony. test wyrażenie1 operator wyrażenie2 lub w postaci nawiasów kwadratowych: [wyrażenie1 operator wyrażenie2 ]

Jak efektywnie zarządzać systemem operacyjnym? -a plik istnieje -b plik istnieje i jest blokowym plikiem specjalnym - plik istnieje i jest plikiem znakowym -e plik istnieje -h plik istnieje i jest linkiem symbolicznym = sprawdza czy wyrażenia są równe!= sprawdza czy wyrażenia są różne -n wyrażenie ma długość większą niż 0 -d wyrażenie istnieje i jest katalogiem -z wyrażenie ma zerową długość -r można czytać plik -w można zapisywać do pliku -x można plik wykonać -f plik istnieje i jest plikiem zwykłym -p plik jest łączem nazwanym -N plik istnieje i był zmieniany od czasu jego ostatniego odczytu plik1 -nt plik2 plik1 jest nowszy od pliku2 plik1 -ot plik2 plik1 jest starszy od pliku2 -lt mniejsze niż -gt większe niż -ge większe lub równe -le mniejsze lub równe

Instrukcja wzorca CASE case zmienna in "wzorzec1") polecenie1 ;; "wzorzec2") polecenie2 ;; "wzorzec3") polecenie3 ;; *) polecenie_domyślne esac echo "Podaj cyfrę dnia tygodnia" read d case "$d" in "1") echo "Poniedziałek" ;; "2") echo "Wtorek" ;; "3") echo "Środa" ;; "4") echo "Czwartek" ;; "5") echo "Piątek" ;; "6") echo "Sobota" ;; "7") echo "Niedziela" ;; *) echo "Nic nie wybrałeś" esac

Pętla for for zmienna in lista do Polecenie done for x in jeden dwa trzy do echo "To jest $x" done Zmiennej x przypisana jest lista, która składa się z trzech elementów: jeden, dwa, trzy. Wartością zmiennej x staje się po kolei każdy element listy, na wszystkich wykonywane jest polecenie: echo "To jest $x".

Pętla while while warunek do polecenie done x=1 while [ $x -le 10 ] do echo "Napis pojawił się po raz: $x" x=$[x + 1] done Sprawdza warunek czy jest prawdziwy, jeśli tak to wykonane zostanie polecenie lub lista poleceń zawartych wewnątrz pętli, gdy warunek stanie się fałszywy pętla zostanie zakończona.

Pętla until until warunek do polecenie done x=1 until [ $x -ge 10 ] do echo "Napis pojawił się po raz: $x" x=$[x + 1] done Sprawdza czy warunek jest prawdziwy, gdy jest fałszywy wykonywane jest polecenie lub lista poleceń zawartych wewnątrz pętli, między słowami kluczowymi do a done. Pętla until kończy swoje działanie w momencie gdy warunek stanie się prawdziwy.

Pobieranie danych z wykorzystaniem polecenia read read -opcje nazwa_zmiennej echo -n "Wpisz coś:\a" read wpis echo "$wpis" echo "Wpisz dwie wartości:" read a b echo "Wartość zmiennej a to: $a" echo "Wartość zmiennej b to: $b

Pobieranie danych z wykorzystaniem polecenia read -a Kolejne wartości przypisywane są do kolejnych indeksów zmiennej tablicowej. echo "Podaj elementy zmiennej tablicowej:" read -a tablica echo "${tablica[*]}"

Funkcje function nazwa_funkcji { polecenie1 polecenie2 polecenie3 } function napis { echo "To jest napis" } odwołujemy się do niej podając jej nazwę

Funkcje-parametry function param { echo -n pierwszy parametr: " echo $1 echo -n drugi: " echo $2 } param dl 23

Jak efektywnie zarządzać systemem operacyjnym? function suma { wynik=`expr $1 + $2` return $wynik } dodaj 1 2 echo "Wynikiem dodawania jest $?"

Wyrażenia arytmetyczne $((wyrażenie)) lub $[wyrażenie] echo $((8/2)) wynik=$[4*5/2] echo "$wynik"