Przegląd języków programowania

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

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

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

Bash - wprowadzenie. Bash - wprowadzenie 1/39

1 Przygotował: mgr inż. Maciej Lasota

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Powłoka (shell) Powłoka ksh

Wprowadzenie do programowania w powłoce

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

System operacyjny Linux

Podstawy informatyki

Interpreter poleceń oraz zmienne środowiskowe

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

1 Podstawy c++ w pigułce.

Technologie Informacyjne - Linux 3

POPULARNE POLECENIA SKRYPTY. Pracownia Informatyczna 2

Skrypty powłoki w systemie Linux

BASH - WPROWADZENIE Bioinformatyka 4

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

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

Programowanie skryptów powłoki

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

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

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

System operacyjny Linux

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ć

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

1 Podstawy c++ w pigułce.

Powłoka bash. Kurs systemu Unix 1

Środowisko programisty Zestaw 7

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

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

PRACOWNIA INFORMATYCZNA CHARAKTERYSTYKA PRZEDMIOTU BASH - PODSTAWOWE INFORMACJE

Pracownia Komputerowa wykład III

Podstawy Programowania C++

Powłoka interpreter poleceń systemu UNIX

PODSTAWY INFORMATYKI

Wprowadzenie do Scilab: podstawy języka Scilab

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

Programowanie w języku Python. Grażyna Koba

Ćwiczenie 1. Wprowadzenie do programu Octave

Ćwiczenie nr 14: System Linux

Argumenty wywołania programu, operacje na plikach

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

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

Przekierowanie wejścia wyjścia:

Laboratorium Ubuntu Linux.

Systemy operacyjne. Instrukcja laboratoryjna. Ćwiczenie 1: Polecenia systemu UNIX/LINUX. Opracował: dr inż. Piotr Szpryngier

4. Funkcje. Przykłady

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

2 Przygotował: mgr inż. Maciej Lasota

Wstęp do Informatyki dla bioinformatyków

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

pico mojskrypt bash mojskrypt chmod +x mojskrypt./mojskrypt

Języki skryptowe w programie Plans

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

Systemy operacyjne Programowanie w języku powłoki sh

Znaki globalne w Linuxie

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

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

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

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

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

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

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

Podstawy Programowania.

Systemy operacyjne 11

Ćwiczenie 1. Wprowadzenie do programu Octave

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

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

Pracownia Informatyczna I ORGANIZACJA ZAJĘĆ, ZASADY ZALICZENIA

Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

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

Linux: System Plików

Wstęp do programowania

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

Strona1. Linux. Skrypty powłoki

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Warsztaty dla nauczycieli

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

LibreOffice Calc VBA

Matlab Składnia + podstawy programowania

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!

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

Tworzenie skryptu: Skrypty powłoki

Wstęp do Programowania Lista 1

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Wstęp do systemu Linux

Technologie Informacyjne - Linux 2

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

Podstawy Programowania

Przetwarzanie sygnałów

Część 4 życie programu

Transkrypt:

Przegląd języków programowania Dariusz Chrobak czerwca 017

Spis treści 1 Linux 1.1 Instalacja na nośniku pamięci USB............................ 1.1.1 Knoppix....................................... 1.1. LinuxMint/Ubuntu................................. 1. Przydatne programy i polecenia powłoki systemowej.................. 3 1.3 Skrypty powłoki bash................................... 6 1.4 Zadania........................................... 15 Język Tcl 16.1 Podstawowe polecenia................................... 16. Wejście wyjście programu................................ 1.3 Przykładowy program mnożenie macierzy........................4 Zadania........................................... 3 3 Język C 4 3.1 Struktura programu.................................... 4 1

Rozdział 1 Linux 1.1 Instalacja na nośniku pamięci USB Celem jest instalacja systemu operacyjnego Linux na nośniku pamięci USB (pendrive), tak by było możliwe trwałe zapisywanie zmian dokonywanych przez użytkownika. Zostaną przedstawione dwie możliwości związane z dystrybucjami: Knoppix, LinuxMint. 1.1.1 Knoppix Ze strony www.knoppix.org pobieramy obraz ISO aktualnej wersji systemu operacyjnego, który następnie nagrywamy na płytę DVD. Restartujemy komputer ładując Knoppix a z płyty DVD. Na pulpicie widać ikonę programu flash-knoppix tworzącego obraz systemu Knoppix w pamięci USB wraz z dodatkową partycją (tzw. overlay) przeznaczoną do trwałego przechowywania danych użytkownika. Należy uruchomić ten program i postępować zgodnie ze wskazówkami pojawiającymi się w kolejnych okienkach. 1.1. LinuxMint/Ubuntu Inny sprawdzony sposób utworzenia bootowalnej pamięci USB z partycją umożliwiającą przechowywanie danych użytkownika wykorzystuje dystrybucję LinuxMint (linuxmint.com) lub Ubuntu (www.ubuntu.com) oraz program mkusb. Pobieramy obraz ISO np. LinuxMint-Xfce i nagrywamy na płytę DVD. Xfce to lekkie środowisko graficzne (desktop environment) dla systemów uniksowych. Uruchamiamy system operacyjny z płyty DVD i aby zainstalować program mkusb musimy najpierw dodać nowe repozytorium. Otwieramy terminal i wykonujemy poniższe polecenia: > sudo add - apt - repository universe > sudo add -apt - repository ppa : mkusb / ppa > sudo apt - get update Teraz instalujemy program mkusb (poniżej trzy powiązane ze sobą programy): > sudo apt - get install mkusb mkusb - nox usb - pack - efi i uruchamiamy go poleceniem: > mkusb

ROZDZIAŁ 1. LINUX 3 Następnie wybieramy opcję d (tryb graficzny) i postępujemy zgodnie ze wskazówkami pojawiającymi się w kolejnych okienkach. Przydatne linki: help.ubuntu.com/community/mkusb calvin.me/create-persistent-ubuntu-16-04-live-usb-even-boots-ram 1. Przydatne programy i polecenia powłoki systemowej Powłoka systemowa (shell) jest programem pośredniczącym między użytkownikiem i systemem operacyjnym. Powłoka przyjmuje polecenia użytkownika i wyprowadza wynik ich działania. W większości systemów linuksowych otwarcie terminala uruchamia tekstową powłokę systemową bash (Bourne-Again Shell). Polecenia systemu operacyjnego lub inne programy uruchamiamy wpisując ich nazwy w wierszu poleceń, rozpoczynającego się od znaku $: użytkownik@ komputer ~/ Desktop $ 1. Pliki i katalogi: pwd Podaje ścieżkę do bieżącego katalogu. ls ls -l ls -la Wyświetla zawartość bieżącego katalogu. cd katalog cd.. cd ~ cd / Zmienia katalog (katalog=/scieżka/dostępu/do/katalogu). mkdir katalog Tworzy katalog. touch plik Zmienia datę dostępu do pliku lub datę jego ostatniej modyfikacji; tworzy plik kiedy ten nie istnieje. rm plik rm -r katalog rmdir katalog Usuwa pliki i katalogi.

ROZDZIAŁ 1. LINUX 4 cp plik1 plik cp plik katalog Kopiuje pliki i katalogi. mv plik1 plik mv plik katalog Przenoszenie lub zmiana nazwy plików i katalogów. cat plik Wyświetla zawartość pliku. less plik Wyświetla zawartość pliku. Umożliwia np. wyszukiwanie znaków. grep wzorzec plik Znajduje wiersze pliku pasujące do wzorca. nano plik Uruchamia prosty, tekstowy edytor plików.. Użytkownicy: whoami Podaje nazwę użytkownika. adduser użytkownik [ grupa ] Dodaje nowego użytkownika. Nawias kwadratowy oznacza argument opcjonalny. addgroup grupa Tworzy nową grupę. passwd [ użytkownik ] Zmiana hasła. users Wyświetla użytkowników systemu. 3. Prawa dostępu: chmod OGA plik Modyfikuje prawa do pliku. Pola O,G i A przyjmują wartości będące sumą liczb (r+w+x) odpowiadających prawom: do odczytu (r=4), do zapisu (w=) i do uruchomienia (x=1). Pole O dotyczy praw właściciela pliku, pole G dotyczy praw grupy użytkowników, do których należy właściciel pliku, a pole A dotyczy wszystkich użytkowników systemu.

ROZDZIAŁ 1. LINUX 5 chown właściciel [: grupa ] plik chown -R właściciel [: grupa ] katalog Zmienia właściciela i/lub grupę pliku. chgrp grupa plik chgrp -R grupa ścieżka 4. Procesy: Zmienia właściciela i/lub grupę pliku. ps ps -e Pokazuje procesy uruchomione przez użytkownika lub wszystkie procesy (-e). kill PID Zabija proces o identyfikatorze PID. polecenie & 5. Pomoc: Uruchamia polecenie w tle. man program Wyświetla o ile istnieje plik pomocy podręcznej dla programu. 6. Przekierowania i potoki poleceń: Standardowa komunikacja uruchomionego programu z otoczeniem odbywa się poprzez kanały: wejściowy (0), wyjściowy (1) i błędów (). Możliwe jest przekierowanie standardowego kanału do pliku: polecenie < plik Standardowe wejście to plik. polecenie > plik Przekierowanie standardowego kanału wyjścia do pliku. Zawartość pliku jest przedtem kasowana. polecenie >> plik Przekierowanie standardowego kanału wyjścia do pliku. końcu pliku. Dane są dopisywane na polecenie1 polecenie Kanał wyjściowy programu można łączyć z kanałem wejściowym innego programu.

ROZDZIAŁ 1. LINUX 6 1.3 Skrypty powłoki bash Instrukcje programowania powłoki bash można umieścić w pliku (skrypcie) i po ustawieniu odpowiednich uprawnień, skrypt można uruchomić tak jak każdy inny program. W pierwszym wierszu skryptu umieszczamy odwołanie do programu, który będzie interpretował (wykonywał) instrukcje umieszczone w kolejnych wierszach: 3 # To jest komentarz 4 5 # Polecenie echo wyprowadza łańcuch znaków na standardowe wyjscie. 6 echo Pierwszy skrypt 7 echo " Pierwszy skrypt " 8 echo Pierwszy skrypt Zmienną powłoki bash definiujemy w następujący sposób: 3 a= 4 5 b =" Wartość zmiennej a: $a" 6 echo $b 7 8 b= Wartość zmiennej a: $a 9 echo $b 10 11 echo " Ala ma kota " > plik. txt 1 c=$( cat plik. txt ) 13 echo $c Argumenty wywołania skryptu:./ skrypt [ arg1 [ arg [... argn ]]] można w nim wykorzystać, ponieważ są one wartościami predefiniowanych stałych: $0 : nazwa skryptu $1 - $9 : pierwsze 9 argumentów $# : liczba argumentów $@ : wszystkie argumenty $? : status wyjścia ostatnio wykonanego skryptu $$ : identyfikator bieżącego procesu $USER : nazwa użytkownika, który wywołał skrypt $HOSTNAME : nazwa komputera, na którym uruchomiono skrypt $SECONDS : liczba sekund od chwili wywołania skryptu $RANDOM : zwraca liczbę losową z zakresu 0-3767 $LINENO : zwraca bieżący wiersz skryptu

ROZDZIAŁ 1. LINUX 7 Zakres zmiennej: 3 z1 =1 4 export z = 5 6 echo $z1 7 echo $z 8 9 # Uruchomienie procesu pochodnego, terminala. 10 xterm 11 1 # W nowo otwartym oknie wykonaj polecenia : 13 # echo $z1 14 # echo $z Wejście użytkownika: 3 echo " Podaj nazwę :" 4 read x 5 echo " Twoja nazwa to: $x" inny sposób: 3 read -p " Podaj nazwę użytkownika :" x 4 read - sp " Podaj hasło :" y 5 6 echo 7 echo " Twoja nazwa to: $x" 8 echo " Twoja nazwa to: $y" jeszcze inny sposób: 3 # plik dane. txt : 4 # Ryszard Skórka 36 1988 5 # Jan Kowalski 45 1999 6 # Tomasz Adamski 45 1966 7 8 cat / dev / stdin sort -k 3,4 Wyrażenia arytmetyczne: instrukcja let:

ROZDZIAŁ 1. LINUX 8 let a =5+4 ; echo $a let " a = 5 + 4" ; echo $a let a ++ ; echo $a let " a = 4 * 5" ; echo $a z=3 let " a = $z + 30" ; echo $a instrukcja expr: expr 5 + 4 expr "5 + 4" expr 5+4 expr 5 \* $1 expr 11 % a=$( expr 10-3 ) ; echo $a instrukcja $((...)): a=$(( 4 + 5 )) ; echo $a a=$ ((3+5)) ; echo $a b=$(( a + 3 )) ; echo $b b=$(( $a + 4 )) ; echo $b b=$[ a + 3 ] ; echo $b b=$[ $a + 4 ] ; echo $b (( b++ )) ; echo $b (( b += 3 )) ; echo $b a=$(( 4 * 5 )) ; echo $a długość zmiennej: a= Hello World ; echo ${# a} b =4953 ; echo ${#b} liczby zmiennopozycyjne i kalkulator bc:

ROZDZIAŁ 1. LINUX 9 echo " scale =6; /3" bc -l Testy: W praktyce często stosuje się polecenie testujące: test wyrażenie lub [ wyrażenie ], które zwraca wartość logiczną: prawda (0) lub fałsz (1). Wyrażenie wyrażenie buduje się w oparciu o zasady przedstawione w pomocy podręcznej: man test. mkdir touch praca a. txt test -f a. txt ; echo $? # Czy a. txt jest plikiem regularnym? Wynik : 0 test -e a. txt ; echo $? # Czy a. txt istnieje? Wynik : 0 test -d a. txt ; echo $? # Czy a. txt jest katalogiem? Wynik : 1 test -f praca ; echo $? # Wynik : 1 test -e praca ; echo $? # Wynik : 0 test -d praca ; echo $? # Wynik : 0 [ -d praca ] ; echo $? # Wynik : 0 Instrukcja for: for zmienna in wartości ; do... done Przykład: 3 for a in ala ma kota ; do 4 echo " Drukuję plik : $a" 5 done 6 7 for a in $( ls ) ; do 8 echo " Drukuję plik : $a" 9 done Instrukcja while: while warunek ; do... done Przykład:

ROZDZIAŁ 1. LINUX 10 3 a=0 4 while [ $a - le 0 ] ; do 5 a=$(( a +=1 )) 6 echo " a = $a" 7 done 3 read -p " Podaj hasło : " -s haslo 4 echo 5 6 while [ " $haslo "!= " sekret " ] ; do 7 read -p " Niepoprawne hasło. Podaj hasło : " -s haslo 8 echo 9 done 10 11 echo " Twoje hasło : sekret " Instrukcja until: until warunek ; do... done Przykład: 3 a=0 4 until [ $a - gt 0 ] ; do 5 a=$(( a +=1 )) 6 echo " a = $a" 7 done 3 read -p " Podaj hasło : " -s haslo 4 echo 5 6 until [ " $haslo " = " sekret " ] ; do 7 read -p " Niepoprawne hasło. Podaj hasło : " -s haslo 8 echo 9 done 10 11 echo " Twoje hasło : sekret " Wykonywanie pętli przerywa instrukcja break. Aby przejść do następnej iteracji należy wydać polecenie continue.

ROZDZIAŁ 1. LINUX 11 Pętle w stylu języka C: for (( n=1 ; n <=10 ; n++ )) ; do... done ((n =1)) while ((n <=10)) ; do... ((n ++)) done ((n =1)) until ((n >10)) ; do... ((n=n +1)) done Instrukcje warunkowa if: if warunek ; then... elif warunek ; then... else... fi Przykład: 3 a=$1 4 if [ "$a" = 1 ] ; then 5 echo " Wprowadzono : 1" 6 elif [ "$a" = ] ; then 7 echo " Wprowadzono : " 8 else 9 echo " Nie wprowadzono liczb : 1, " 10 fi Instrukcje warunkowa case: case slowo in wzorzec1 )... instrukcje... ;; wzorzec )... instrukcje... ;;... *)... instrukcje... esac

ROZDZIAŁ 1. LINUX 1 Jeżeli slowo pasuje do któregoś ze wzorców, to wtedy wykonywane są odpowiednie instrukcje. Jeżeli slowo nie pasuje do któregoś ze wzorców, to wtedy wykonywane są instrukcje należące do przypadku *). Wzorzec może być listą wzorców oddzielonych znakiem. Wzorce tworzone są według następujących reguł: * - pasuje do dowolnego ciągu znaków? - pasuje do dowolnego pojedynczego znaku [...] - pasuje do jednego z podanych (...) znaków?( lista_ wzorców ) - pasuje do zera lub jednego wystapienia wzorca *( lista_ wzorców ) - pasuje do zera lub więcej wystapień wzorca +( lista_ wzorców ) - pasuje do jednego lub więcej wystapień wzorca @( lista_ wzorców ) - pasuje do jednego wystapienia wzorca!( lista_ wzorców ) - pasuje do wszystkiego chyba, że wystąpi wzorzec lista_ wzorców - zawiera wzorce oddzielone znakiem Przykład: 3 echo -n " Podaj liczbe [1,1]: " 4 read liczba 5 6 case " $liczba " in 7 "1") echo " Styczen " ;; 8 "") echo " Luty " ;; 9 "3") echo " Marzec " ;; 10 "4") echo " Kwiecien " ;; 11 "5") echo " Maj " ;; 1 "6") echo " Czerwiec " ;; 13 "7") echo " Lipiec " ;; 14 "8") echo " Sierpien " ;; 15 "9") echo " Wrzesien " ;; 16 "10") echo " Pazdziernik " ;; 17 "11") echo " Listopad " ;; 18 "1") echo " Grudzien " ;; 19 *) echo " Liczba poza zakresem." 0 esac Tablice: Tablice to zmienne, które przechowują różne wartości pod tą samą nazwą. konkretnej wartości wymaga użycia indeksu. # deklaracja tablicy 5 elementowej tablica =(1 3 9 " ala ma" kota ) Odwołanie do for i in $( seq 0 4 ) ; do echo ${ tablica [i]} done Ciekawe polecenie to: seq [start] [krok] stop, pozwalające generować sekwencje liczb całkowitych od start do stop co krok. Inny sposób deklaracji tablicy:

ROZDZIAŁ 1. LINUX 13 tablica [0]=1 tablica [1]=3 tablica []=9 tablica [3]=" ala tablica [4]= kota ma" for i in $( seq 0 4 ) ; do echo ${ tablica [i]} done Dostęp do wszystkich elementów tablicy: echo ${ tablica [*]} echo ${ tablica [@]} Liczba elementów tablicy: echo ${# tablica [*]} echo ${# tablica [@]} Proste menu i instrukcja select: 3 # Wybieramy 1,, 3 lub 4. 4 5 PS3 =" Wybierz opcję : " # Przetestuj skrypt bez tego wiersza 6 select opt in X Y Z Koniec ; do 7 if [ " $opt " = "X" ] ; then 8 echo " Wybrano $opt ( $REPLY )" 9 elif [ " $opt " = "Y" ] ; then 10 echo " Wybrano $opt ( $REPLY )" 11 elif [ " $opt " = "Z" ] ; then 1 echo " Wybrano $opt ( $REPLY )" 13 elif [ " $opt " = " Koniec " ] ; then 14 break 15 else 16 echo " Wybierz : 1,..., 4" 17 fi 18 done Funkcje: Funkcje to fragmenty kodu, do których odwołujemy się poprzez nazwę funkcji. # Deklaracja funkcji function nazwa_ funkcji {... instrukcje... }

ROZDZIAŁ 1. LINUX 14 nazwa_ funkcji () {... instrukcje... } # Wywołanie funkcji nazwa_ funkcji arg1 arg... Do funkcji można przekazać wartości argumentów: arg1, arg,..., uzyskując do nich dostęp tak jak w przypadku argumentów wywołania skryptu: $1, $,... #!/ bin / bash iloczyn () { a=$1 b=$ echo $(( a*b )) } wynik =$( iloczyn 5 ) echo $wynik W powyższym skrypcie zademonstrowano sposób jak funkcja może zwrócić wyliczoną wartość i jak przypisać ją innej zmiennej. Aby przerwać wykonywanie funkcji należy użyć instrukcji return kod_wyjścia, gdzie kod_wyjścia może być wartością zwracaną przez funkcję, jednak ma to sens o ile spodziewamy się, że 0<=kod_wyjścia<=55. Zmienne występujące wewnątrz funkcji mogą być lokalne, o ile ich deklaracja zostanie poprzedzona słowem local. Odczyt pliku: #!/ bin / bash echo " Podaj nazwe pliku do wyswietlenia :" read plik if [! -r $plik ]; then echo " Nie moge czytac z pliku : $plik " exit 1 fi cat $plik while read linia do echo $linia done Inny sposób: #!/ bin / bash

ROZDZIAŁ 1. LINUX 15 echo " Podaj nazwe pliku do wyswietlenia :" read plik if [! -r $plik ]; then echo " Nie moge czytac z pliku : $plik " exit 1 fi while read linia do echo $linia done < $plik 1.4 Zadania 1. Napisz skrypt, który oblicza wartość N! i następnie wyświetla odpowiedni komunikat, np. 4! = 4.. Napisz skrypt, który usuwa wszystkie pliki w zadanym katalogu (parametr wywołania skryptu), poza plikami wykonywalnymi. 3. Napisz skrypt pobierający trzy argumenty. Pierwsze dwa powinny być nazwami istniejących plików tekstowych (polecenie file). Trzeci argument powinien być nazwą nieistniejącego pliku. Jeżeli te warunki są spełnione, to zawartość dwóch pierwszych plików powinna być zapisana w trzecim pliku, który należy wcześniej utworzyć. 4. Napisz skrypt, który zapyta o ścieżkę do katalogu, a następnie zarchiwizuje (polecenie tar) jego zawartość do pliku o nazwie podanej przez użytkownika. 5. Napisz skrypt, który zapyta użytkownika o ścieżkę do katalogu, a następnie obliczy (polecenie wc) ilość wierszy i ilość znaków w każdym z plików tekstowych znajdujących się w wybranym katalogu.

Rozdział Język Tcl Więcej wiadomości o języku Tcl można znaleźć na stronie: www.tcl.tk/man/..1 Podstawowe polecenia Język Tcl (Tool Command Language) jest językiem interpretowanym. Interpreter języka Tcl to program tclsh. Plik źródłowy (skrypt) prostego programu może mieć postać: 3 puts " Pierwszy program " 4 puts " Pierwszy "; puts " program " 5 6 # komentarz 7 8 puts " Pierwszy \ 9 program " Komentarze rozpoczynamy znakiem #. Polecenia oddzielamy znakiem nowego wiersza lub średnikiem. Polecenie można kontynuować w następnym wierszu, o ile pierwsza część polecenia zostanie zakończona znakiem \. Zmienne proste: Zmienną definiujemy korzystając z polecenia set określając nazwę zmiennej i przypisując jej pewną wartość. Polecenie set zwraca wartość zmiennej. Nie jest konieczne deklarowanie typu zmiennej. 3 set x 10 4 set lan " Wartość x =" 5 6 puts $x 7 puts " Wartość x= $x" 8 puts " $lan$x " 9 puts { Wartość x= $x} 16

ROZDZIAŁ. JĘZYK TCL 17 Do wartości zmiennej odwołujemy się poprzedzając jej nazwę znakiem $. Łańcuch znaków może by zawarty wewnątrz nawiasów klamrowych {...} lub przy użyciu cudzysłowu.... Różnicę w stosowaniu wymienionych form prezentuje powyższy przykład. Umieszczenie odwołania do wartości zmiennej wewnątrz... spowoduje podstawienie aktualnej wartości zmiennej, natomiast umieszczenie odwołania do wartości zmiennej wewnątrz {...} nie spowoduje podstawienia wartości zmiennej. Mówimy o cytowaniu łańcucha znaków z podstawieniem lub dosłownie. Nawiasy kwadratowe [...] służą do cytowania poleceń, np: 3 puts [ set x 10] Zmienne tablicowe: Definicję zmiennej tablicowej i sposób odwoływania się do niej wyjaśni przykład: 3 set x (0) 10 4 set x (1) 11 5 set x () 1 6 set x (3) 13 7 8 set i 1 9 10 puts $x () 11 puts $x($i) Listy: Lista zawiera elementy oddzielone spacjami i ujęte w nawiasy klamrowe lub cudzysłów: 3 set lista { a b cd 11.0 {1 3}} 4 puts $lista Szereg operacji na listach można wykonać stosując następujące polecenia: 3 # polecenie list tworzy listę 4 set lista [ list a b cd 11.0 {1 3}]; puts $lista 5 6 # ilość elementów w liście 7 puts [ llenght $lista ] 8 9 # pobranie elementu listy 10 puts [ lindex $lista 0] 11 puts [ lindex $lista end -]

ROZDZIAŁ. JĘZYK TCL 18 1 puts [ lindex $lista end ] 13 14 # sortowanie elementów listy 15 puts [ lsort - increasing $lista ] 16 puts [ lsort - decreasing $lista ] 17 18 # dodawanie elementu na koniec listy 19 puts [ lappend lista { ala ma kota }] 0 1 # zamiana elementu listy puts [ lset lista 1 { ala ma kota }] 3 4 # inne plecenia : linsert, lsearch, lrange, lreplace Łańcuchy znaków: Łańcuch znaków to ciąg znaków ujęty w nawiasy klamrowe lub cudzysłów. Operacje na łańcuchach znaków wykonujemy przy pomocy polecenia string. 3 set str " Ala ma kota, kot ma robota." 4 5 puts [ string length $str ] 6 puts [ string reverse $str ] 7 puts [ string toupper $str ] 8 puts [ string tolower $str ] 9 puts [ string index $str ] 10 puts [ string first a $str ] 11 puts [ string first x $str ] 1 puts [ string range $str 1 10] 13 14 #... Wyrażenia matematyczne: Operatory dodawania, odejmowania, mnożenia i dzielenia (+, -, *, /) są takie jak zwykle. Potęgowanie wykonuje się przy pomocy funkcji pow(3,), co odpowiada działaniu 3 = 9. Aby obliczyć wartość wyrażenia matematycznego należy użyć polecenia expr. 3 set x [ expr *]; puts $x 4 set x [ expr /3]; puts $x 5 set x [ expr.0/3]; puts $x 6 set x [ expr./3]; puts $x 7 set x [ expr /3.0]; puts $x 8 set x [ expr /3,]; puts $x 9 set x [ expr * pow (,3)]; puts $x

ROZDZIAŁ. JĘZYK TCL 19 Dokumentacja języka Tcl zawiera informacje o innych funkcjach matematycznych (trygonometryczne, logarytmiczne, wykładnicze,...) i sposobie ich użycia. Wyrażenia logiczne: Wyrażenia zawierające operatory porównania (<, >, <=, >=, ==) generują jedną z dwóch wartości: true i false. Prawdzie logicznej odpowiadają liczby różne od zera. Zero odpowiada fałszowi. 3 puts [ expr 1 >] 4 puts [ expr 1 <] Operatory logiczne and i or są reprezentowane przez: && i. Znakiem negacji logicznej jest!. Wyrażenia logiczne można umieszczać w nawiasach okrągłych (...). Instrukcja warunkowa if: Znaczenie instrukcji warunkowej jest takie jak w innych językach programowania. Poniżej znajdują się przykłady jej użycia: 3 if { true } { puts Alamakota } 4 if { false } { puts Alamakota } 5 6 set x 17 7 set y 15 8 if {$x > $y} { 9 puts " X jest większe od Y" 10 } elseif { $x == $y} { 11 puts " X jest równe Y" 1 } else { 13 puts " X nie jest większe od Y" 14 } Klauzul elseif może być więcej niż jedna. Pętla for: Poniższy program definiuje dwa wektory (tablice) i oblicza ich iloczyn skalarny: 3 set MAX 10 4 for { set i 0} {$i < $MAX } { incr i} { 5 set a($i) [ expr $i] 6 set b($i) [ expr $i *] 7 } 8 9 for { set i 0} {$i < $MAX } { incr i} { 10 set c($i) [ expr $a($i )* $b($i )]

ROZDZIAŁ. JĘZYK TCL 0 11 } 1 13 set sum 0 14 for { set i 0} {$i < $MAX } { incr i} { 15 set sum [ expr $sum +$c($i )] 16 } 17 18 puts $sum Pętla while: Podobnie jak wyżej: 3 set MAX 10 4 set i 0 5 while {$i < $MAX } { 6 set a($i) [ expr $i] 7 set b($i) [ expr $i *] 8 incr i 9 } 10 11 set i 0 1 while { $i < $MAX } { 13 set c($i) [ expr $a($i )* $b($i )] 14 incr i 15 } 16 17 set sum 0 18 set i 0 19 while { $i < $MAX } { 0 set sum [ expr $sum +$c($i )] 1 incr i } 3 4 puts $sum Procedury: Procedurę definiuje polecenie proc. Do procedury można przekazać wartości jej argumentów. procedura może zwrócić wartość za pośrednictwem polecenia return. 3 proc suma { var } { 4 return [ expr $var +0] 5 } 6 7 set a 8 puts [ suma $a] 9 puts $a

ROZDZIAŁ. JĘZYK TCL 1 Jak widać wykonanie procedury suma nie powoduje zmiany wartości zmiennej a, ponieważ każda zmienna pojawiająca się w skrypcie Tcl ma określony zakres związany z poziomem wywołania procedury. Aby procedura mogła uzyskać dostęp do zmiennej zdefiniowanej na jednym z wyższych poziomów oraz aby mogła zmodyfikować jej wartość należy użyć polecenia upvar. 3 proc suma {a} { 4 upvar $a aa 5 set aa [ expr $aa +0] 6 } 7 8 set a 9 suma a 10 puts $a 3 proc iloczyn { a b} { 4 upvar $a aa 5 upvar $b bb 6 7 set sum 0 8 for { set i 0} {$i < 10} { incr i} { 9 set sum [ expr $sum + $aa ($i )* $bb ($i )] 10 } 11 return $sum 1 } 13 14 for { set i 0} {$i < 10} { incr i} { 15 set a($i) [ expr $i] 16 } 17 18 for { set i 0} {$i < 10} { incr i} { 19 set b($i) [ expr $i *] 0 } 1 puts [ iloczyn a b]. Wejście wyjście programu Program Tcl można uruchomić przekazując do niego listę wartości: 3 # oczekujemy dwóch wartości 4 if { $argc!= } { puts " Niepoprawna ilość argumentów."; exit }

ROZDZIAŁ. JĘZYK TCL 5 6 # wartości przekazane do skryptu przypisujemy zmiennym x i y 7 set x [ lindex $argv 0] 8 set y [ lindex $argv 1] 9 10 puts " Argumenty wywołania programu :" 11 puts $x 1 puts $y Rozmowa ze skryptem jest możliwa w trakcie jego wykonywania: 3 puts " Podaj liczbę :" 4 gets stdin liczba 5 6 puts stdout " Wprowadzono liczbę : $liczba " Polecenie gets pobiera dane ze standardowego wejścia stdin, a polecenie puts wyprowadza wartość zmiennej x na standardowe wyjście stdout. Identyfikator stdout można pominąć..3 Przykładowy program mnożenie macierzy 3 puts " ====================================================" 4 puts " Macierz A:" puts " Podaj liczbe wierszy :"; gets stdin wa 5 puts " Podaj liczbe kolumn :"; gets stdin ka 6 puts "" 7 puts " Macierz B:" 8 puts " Podaj liczbe wierszy :"; gets stdin wb 9 puts " Podaj liczbe kolumn :"; gets stdin kb 10 puts " ====================================================" 11 1 puts "" 13 14 if { $ka!= $wb } { 15 puts "!!! Liczba kolumn macierzy A różna od liczby wierszy macierzy B!!!" 16 exit 17 } 18 if { $ka == $wb } { 19 puts " Macierz C=A* B ma wymiar : $wa x $kb " 0 } 1 puts " Elementy macierzy A:" 3 set fmt " scan \ $wiersz " 4 for { set i 1} { $i <= $ka } { incr i} { set fmt [ string cat $fmt % f] } 5 set fmt [ string cat $fmt " "]

ROZDZIAŁ. JĘZYK TCL 3 6 for { set i 1} {$i <= $ka } { incr i} { set fmt [ string cat $fmt "A(\$i,$i) "] } 7 for { set i 1} {$i <= $wa } { incr i} { 8 puts " wiersz $i :"; gets stdin wiersz 9 if {[ eval $fmt ]!= $ka } { 30 puts "!!! Nieprawidłowa liczba kolumn!!!" 31 exit 3 } 33 } 34 35 puts "" 36 37 puts " Elementy macierzy B:" 38 set fmt " scan \ $wiersz " 39 for { set i 1} { $i <= $kb } { incr i} { set fmt [ string cat $fmt % f] } 40 set fmt [ string cat $fmt " "] 41 for { set i 1} {$i <= $kb } { incr i} { set fmt [ string cat $fmt "B(\$i,$i) "] } 4 for { set i 1} {$i <= $wb } { incr i} { 43 puts " wiersz $i :"; gets stdin wiersz 44 if {[ eval $fmt ]!= $kb } { 45 puts "!!! Nieprawidłowa liczba kolumn!!!" 46 exit 47 } 48 } 49 50 for { set i 1} {$i <= $wa } { incr i} { 51 for { set j 1} {$j <= $kb } { incr j} { 5 set C($i,$j) 0.0 53 for { set k 1} {$k <= $ka } { incr k} { set C($i,$j) [ expr $C($i,$j )+ $A($i,$k )* $B( 54 } 55 } 56 57 puts "" 58 59 puts " Macierz C=A* B:" 60 for { set i 1} {$i <= $wa } { incr i} { 61 set str "" 6 for { set j 1} {$j <= $kb } { incr j} { 63 set str [ string cat $str "$C($i,$j) "] 64 } 65 puts $str 66 }.4 Zadania Napisz skrypty Tcl realizujące zadania z poprzedniego rozdziału.

Rozdział 3 Język C 3.1 Struktura programu Kod programu napisanego w języku C umieszczamy w pliku o rozszerzeniu.c. Przykładowy plik prg.c może wyglądać następująco: 1 /* Komentarz wielowierszowy 3 Plik prg.c 4 */ 5 6 // Komentarz jednowierszowy 7 8 # include < stdio.h > // Dyrektywy preprocesora 9 10 void czytaj (); // Deklaracje funkcji 11 void sortuj (); 1 void pisz (); 13 14 int main () // Funkcja main () 15 { 16 czytaj (); 17 sortuj (); 18 pisz (); 19 0 return 0; 1 } 3 void czytaj () { printf (" czytaj ()/ n ")} // Definicje funkcji 4 void sortuj () { printf (" czytaj ()/ n ")} 5 void pisz () { printf (" czytaj ()/ n ")} 4