Wprowadzenie do tworzenia skryptów dla bash

Podobne dokumenty
Wprowadzenie do programowania shella (bash)

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

Kurs pisania skryptów w powłoce BASH

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Pracownia Komputerowa wykład III

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

Technologie Informacyjne - Linux 3

Pracownia Komputerowa wykład III

Powłoka bash. Kurs systemu Unix 1

Systemy operacyjne 11

Skrypty powłoki w systemie Linux

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

Programowanie skryptów powłoki

Interpreter poleceń oraz zmienne środowiskowe

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

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

System operacyjny Linux

1 Przygotował: mgr inż. Maciej Lasota

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

Wstęp do Informatyki dla bioinformatyków

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

Powłoka interpreter poleceń systemu UNIX

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

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

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

Powłoka (shell) Powłoka ksh

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

Środowisko programisty Zestaw 7

2. Łańcuchy tekstowe w PHP

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Każde wykonanie bloku instrukcji nazywamy pojedynczym przebiegiem lub iteracją pętli.

Pracownia Komputerowa wyk ad III

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

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

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

pico mojskrypt bash mojskrypt chmod +x mojskrypt./mojskrypt

Tworzenie skryptu: 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.

Umieszczanie kodu. kod skryptu

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

Cw.12 JAVAScript w dokumentach HTML

Linuks skrypty Część teoretyczna

Podstawy programowania skryptów Sh

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Lekcja : Tablice + pętle

JAVAScript w dokumentach HTML (1)

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

Strona1. Linux. Skrypty powłoki

1. Wypisywanie danych

4. Funkcje. Przykłady

POPULARNE POLECENIA SKRYPTY. Pracownia Informatyczna 2

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

PODSTAWY INFORMATYKI

- wszystkie elementy - wszystkie elementy

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

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

Operacje logiczne i struktury sterujące.

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

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

Pętla for. Wynik działania programu:

Wprowadzenie do programowania w powłoce

7. Pętle for. Przykłady

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.

Programowanie w języku Python. Grażyna Koba

Bash - instrukcje warunkowe, pętle i funkcje

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

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

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

Struktura pliku projektu Console Application

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

Trochę o plikach wsadowych (Windows)

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

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

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

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

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

Warunki logiczne instrukcja if

Pytania sprawdzające wiedzę z programowania C++

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Przekierowanie wejścia wyjścia:

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

ECDL Podstawy programowania Sylabus - wersja 1.0

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

Blockly Kodowanie pomoc.

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

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

Podstawy Programowania C++

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

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

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

Wprowadzenie do Scilab: podstawy języka Scilab

Laboratorium Komputerowego Wspomagania Analizy i Projektowania

JAVAScript w dokumentach HTML - przypomnienie

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

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

Transkrypt:

Strona 1 z 9 Wersja oryginalna: Bash tutorial - pegasus.rutgers.edu/~elflord/unix/bash-tute.html autor: Donovan Rebbechi (e-mail: elflord@pegasus.rutgers.edu) tłumaczenie: Łukasz Kowalczyk Spis treści! Wprowadzenie do tworzenia skryptów dla bash-a! Prosty skrypt! Zmienne " Apostrofy vs. cudzysłowy " Nazwy zmiennych w cudzysłowach " Jak działa rozwijanie zmiennych " Używanie nawiasów klamrowych do ochrony nazw zmiennych! Instrukcje warunkowe! Polecenie test i operatory! Niektóre pułapki! Krótki opis operatorów polecenia test! Pętle " Pętle for " Znaki globalne w pętlach " Pętle while! Podstawianie poleceń Wprowadzenie do tworzenia skryptów dla bash Prosty skrypt Skrypt shellowy to nieco więcej niż lista poleceń do wykonania. Zgodnie z konwencją, skrypt powin od następującej linii: Ta linia oznacza, że skrypt powinien być wykonywany przez shell bash niezależnie od tego, jaki she danym momencie. Jest to bardzo ważne, ponieważ składnia rozmaitych shelli może się znacznie róż Prosty przykład Oto przykład bardzo prostego skryptu. Służy on do uruchamiania kilku poleceń. echo "Witam. Twoj login to $USER" echo "Lista plików w bieżącym katalogu, $PWD" ls # wypisz listę plików le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 2 z 9 Zauważ, jak wygląda komentarz w czwartej linii. W skrypcie dla bash-a wszystko stojące za znakiem ignorowane. Pisząc skrypt powinieneś umieszczać w nim komentarze dla wygody osób, które będą g $USER oraz $PWD to zmienne. Są to standardowe zmienne zdeniowane przez bash-a, więc nie mu deniowane oddzielnie w skrypcie. Podczas wykonywania skryptu nazwy zmiennych poprzedzone z zastępowane przez ich aktualną zawartość. Nazywane jest to rozwijaniem zmiennych. Poniżej znajduje się więcej informacji o zmiennych Zmienne Każdy język programowania potrzebuje zmiennych, w skrypcie bash-a denuje się je w następujący X="hello" a używa się ich w następujący sposób: $X Konkretniej, $X oznacza zawartość zmiennej X. Należy zwrócić uwagę na kilka szczegółów dotyczą! Po obu stronach znaku = nie mogą znajdować się spacje. Na przykład poniższa linia spowoduj błędu. X = hello! Wprawdzie w przykładach używałem cudzysłowów, ale są one potrzebne tylko, gdy w wartoś znajdują się spacje. X=hello world # błąd X="hello world" # OK Ten wymóg spowodowany jest tym, że shell interpretuje linię poleceń jako komendę i jej argumenty spacjami. foo=bar jest uważane za polecenie. Jeżeli shell będzie musiał zinterpretować linię foo = wniosku, że foo jest poleceniem. Podobnie, X=hello world zostanie zrozumiane przez shell jako p przypisania X=hello z dodatkowym argumentem world, co nie ma sensu, ponieważ polecenie przyp potrzebuje dodatkowych argumentów. Apostrofy vs. cudzysłowy Zasada jest prosta: wewnątrz cudzysłowów nazwy zmiennych poprzedzone przez $ są zastępowane p zawartość, natomiast wewnątrz apostrofów nie. Jeżeli nie zamierzasz odnosić się do zmiennych, uży ponieważ skutki ich użycia są bardziej przewidywalne. Przykład echo -n '$USER=' # dzięki opcji -n kursor nie przechodzi do kolejnej linii echo "$USER" le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 3 z 9 echo "\$USER=$USER" # ten sam efekt, co po pierwszych dwóch liniach Efekty działania skryptu są następujące (zakładając, że twoja nazwa użytkownika to elflord) $USER=elflord $USER=elflord więc działanie cudzysłowów można ominąć. Cudzysłowy dają większą elastyczność, ale są mniej pr Stojąc przed wyborem, wybierz raczej apostrofy. Nazwy zmiennych w cudzysłowach Niekiedy należy ujmować nazwy zmiennych w cudzysłowy. Jest to istotne, gdy wartość zmiennej (a (b) jest pustym ciągiem. Na przykład. X="" if [ -n $X ]; # -n testuje, czy argument nie jest pusty echo "Zmienna X nie jest pusta" Działanie tego da następujący efekt: Zmienna X nie jest pusta Dlaczego? Ponieważ shell zamienia $X na pusty ciąg. Wyrażenie [ -n ] zwraca prawdę (ponieważ n argumentu). Poprawny skrypt powinien wyglądać następująco: X="" if [ -n "$X" ]; # -n testuje, czy argument nie jest pusty echo "Zmienna X nie jest pusta" W tym przykładzie shell rozwinie wyrażenie do postaci [ -n "" ], co zwraca fałsz, ponieważ ciąg zaw cudzysłowach jest pusty. Jak działa rozwijanie zmiennych Poniższy przykład ma przekonać czytelnika, że shell naprawdę rozwija zmienne. Żeby przekonać cz naprawdę rozwija zmienne. LS="ls" LS_FLAGS="-al" $LS $LS_FLAGS $HOME Może to wyglądać tajemniczo. Ostatnia linia jest w istocie poleceniem do wykonania przez shell: le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 4 z 9 ls -al /home/elflord (zakładając, że twoim katalogiem domowym jest /home/elflord). Shell po prostu zastępuje zmienne następnie wykonuje polecenie. Używanie nawiasów klamrowych do ochrony nazw zmiennych Oto potencjalna sytuacja. Załóżmy, że chcesz wypisać na ekranie zawartość zmiennej X i bezpośred "abc". Jak to zrobić? Spróbujmy: X=ABC echo "$Xabc" Ekran pozostaje pusty; co się stało? Shell zrozumiał, że chodzi nam o zawartość zmiennej Xabc, któ została zainicjalizowana. Sposób na obejście problemu jest prosty: nazwę zmiennej należy ująć w na aby oddzielić ja od innych znaków. Poniższy kod daje pożądany rezulat. X=ABC echo "${X}abc" Instrukcje warunkowe Niekiedy należy sprawdzić jakiś warunek. Na przykład, czy ciąg ma zerową długość? Czy istnieje d dowiązaniem symbolicznym, czy prawdziwym plikiem? Na początku używamy polecenia if, aby warunek. Składnia jest następująca: if warunek wyrażenie1 wyrażenie2... Niekiedy możesz chcieć wykonać inny zestaw poleceń, kiedy test warunku kończy się wynikiem neg to osiągnąć w następujący sposób: if warunek wyrażenie1 wyrażenie2... else wyrażenie3 Można też sprawdzać inny warunek, kiedy pierwszy nie jest spełniony. Dozwolona jest dowolna iloś if warunek1 wyrażenie1 le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 5 z 9 wyrażenie2... elsif warunek2 wyrażenie3 wyrażenie4... elsif warunek3 wyrażenie5 wyrażenie6... Polecenia wewnątrz bloku pomiędzy if/elsif,a następnym elsif lub sa wykonywane, jeżeli warunek jest prawdziwy. W miejscu przeznaczonym na warunek może znaleźć się dowolne polecen komend będzie wykonany tylko, jeżeli to polecenie zwróci kod równy 0 (tzn. skończy się "sukcesem wprowadzeniu do testowania warunków będziemy używali tylko polecenia "test" lub "[ ]". Polecenie test i operatory Do testowania warunków używa sie najczęściej polecenia test, które zwraca prawdę lub fałsz (dokła 0 lub różny od zera) zależnie od tego, czy testowany warunek wypadł pozytywnie czy negatywnie. D następująco: test operand1 operator operand2 niektóre testy wymagają tylko jednego operandu (drugiego). Zazwyczaj polecenie test jest zapisywan [ operand1 operator operand2 ] Najwyższy czas na kilka przykładów. X=3 Y=4 empty_string="" if [ $X -lt $Y ] # czy $X jest mniejsze niż $Y? echo "\$X=${X} jest większe niż \$Y=${Y}" if [ -n "$pusty_ciag" ]; echo "pusty_ciag nie jest pusty" if [ -e "${HOME}/.fvwmrc" ]; # czy istnieje plik!/.fvwm echo "masz plik.fvwmrc, " if [ -L "${HOME}/.fvwmrc" ]; # czy jest dowiązaniem symb echo "który jest dowiązaniem symbolicznym" elsif [ -f "${HOME}/.fvwmrc" ]; # czy zwykłym plikiem echo "który jest zwykłym plikiem" else echo "nie masz pliku.fvwmrc" le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 6 z 9 Niektóre pułapki Polecenie test musi mieć postać "operand1<odstęp>operator<odstęp>operand2" lub operator<odstęp mówiąc inaczej, te odstępy są naprawdę potrzebne, ponieważ pierwszy ciąg bez spacji jest interpreto operator (jeżeli zaczyna się od '-') lub operand (jeżeli zaczyna się od czegoś innego). Na przykład, if [ 1=2 ]; echo "hello" Produkuje zły wynik, tzn. wypisuje "hello", ponieważ widzi operand, ale żadnych operatorów. Kolejną pułapką może się okazać niezabezpieczanie zmiennych cudzysłowami. Podano już przykład ujmować w cudzysłowy wszystkie parametry testu z opcją -n. Poza tym, istnieje mnóstwo dobrych p których należy używać cudzysłowów lub apostrofów w niemal każdej sytuacji. Zapominanie o tym m przyczyną bardzo dziwnych błędów. Oto przykład: X="-n" Y="" if [ $X = $Y ] ; echo "X=Y" Wynik działania tego skryptu będzie bardzo mylący, ponieważ shell rozwinie nasze wyrażenie do po [ -n = ] a ciąg "=" ma niezerową długość Krótki opis operatorów polecenia test Poniżej znajduje się krótkie omówienie operatorów polecenia test. Nie jest ono w żadnym razie wyc przypuszczalnie tyko tyle powinieneś pamiętać (pozostałe operatory można znaleźć w opisie basha - lic operator zwraca prawdę, jeżeli... op -n operand ma niezerową długość 1 -z operand ma zerową długość 1 -d istnieje katalog o nazwie operand 1 -f istnieje plik o nazwie operand 1 -eq operandy są równymi sobie liczbami całkowitymi 2 -neq przeciwnieństwo -eq 2 = operandy są jednakowymi ciągami znaków 2!= przeciwnieństwo = 2 -lt operand1 jest mniejszy niż operand2 (operandy są liczbami całkowitymi) 2 -gt operand1 jest większy niż operand2 (operandy są liczbami całkowitymi) 2 d1 j ó l b i k iż d2 ( d li b i łk i i) 2 le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 7 z 9 Pętle -ge operand1 jest równy lub większy niż operand2 (operandy są liczbami całkowitymi) 2 -le Pętle pozwalają na wykonywanie iteracji lub wykonanie tych samych działań na kilku parametrach. dostępne są następujące rodzaje pętli:! petle for! pętle while Pętle for Składnię tych pętli najlepiej jest zademonstrować na przykładzie. for X in czerwony zielony niebieski do echo $X done Pętla for wykonuje polecenia zawarte wewnątrz pętli na parametrach rozdzielonych spacjami. Zauw parametry zaierają w sobie spacje, muszą być ujęte w cudzysłowy (apostrofy). Oto przykład: kolor1="czerwony" kolor2="jasny błękit" kolor3="ciemna zieleń" for X in "$kolor1" $kolor2" $kolor3" do echo $X done Czy zgadłbyś, co się stanie, gdy zapomnimy o cudzysłowach w pętli for? Powinieneś używać cudzy jesteś pewien, że parametry nie zawierają spacji. Znaki globalne w pętlach Wszystkie parametry zawierające * są zastępowane listą plików, które pasują do wzorca. W szcególn gwiazdka (*) jest zastępowana przez listę wszystkich plików w bieżącym katalogu (z wyjątkiem plik nazwy zaczynją się od kropki "." ) echo * operand1 jest równy lub mniejszy niż operand2 (operandy są liczbami całkowitymi) wypisuje nazwy wszystkich plików i katalogów w bieżącym katalogu echo *.jpg 2 le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 8 z 9 wypisuje wszystkie pliki jpeg echo ${HOME}/public_html/*.jpg wypisuje nazwy wszystkich plików jpeg w twoim katalogu public_html Ta właściwość jest bardzo użyteczna w wykonywaniu działań na wszystkich plikach w katalogu, szc pętlach for. Na przykład: for X in *.html do done grep -L '<UL>' "$X" Pętle while Pętle while działają tak długo, jak długo prawdziwy jest dany warunek. Na przykład: X=0 while [ $X -le 20 ] do echo $X X=$((X+1)) done Nasuwa się naturalne pytanie: dlaczego bash nie pozwala na stosowanie pętli for w stylu języka C for (X=1,X<10; X++) powód jest prosty: skrypty basha są interpretowane i z tego powodu dosyć powolne. Dlatego odradza silnie wykorzystujące iterację. Podstawianie poleceń Podstawianie poleceń jest bardzo wygodnym mechanizmem basha. Pozwala mianowicie na pobranie polecenie wyprowadza na ekran i traktowanie ich, jak gdyby zostały wprowadzone z klawiatury. Na chcesz, aby zmiennej X została przypisana treść, którą wyprodukowało jakieś polecenie, sposobem j poleceń. Są dwa sposoby podstawiania poleceń: rozwijanie zawartości nawiasów oraz ujmowanie polecenia w apostrofy. Rozwijanie zawartości nawiasów działa następująco: $(polecenia) zostaje zamienione przez to, co polecenia. Nawiasy mogą być zagnieżdżane, tak więc polecenia również mogą zawierać nawiasy. Rozwijanie we wstecznych apostrofach zamienia `polecenia` treścią wyprowadzoną przez polecen Przykład: le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03

Strona 9 z 9 pliki="$(ls )" pliki_html=`ls public_html` echo $pliki echo $pliki_html X=`expr 3 \* 2 + 4` # expr oblicza wyrażenia arytmetyczne echo $X Zauważ, że chociaż ls wyprowadza listę plików ze znakami nowej linii, zmienne nie zawierają tych basha nie mogą zawierać znaków nowej linii. Wygodniejsza w użyciu jest metoda z nawiasami, ponieważ łatwo jest je zagnieżdżać. Poza tym, ich większość wersji basha (wszystkie zgodne ze standardem POSIX). Metoda ze wstecznym apostrofam czytelna i dostępna nawet w bardzo prymitywnych shellach (każda wersja /bin/sh). Copyright 2000 Łukasz B. Kowalczyk le://c:\moje dokumenty\bobo fuw Bash Tutorial.htm 00-12-03