05 WDL SkryptyBash

background image

Programowanie w
bash-u

dr inż. Ireneusz Mrozek

dr inż. Andrzej Chmielewski

Wydział Informatyki

Politechniki Białostockiej

background image

Powłoka systemowa

bash

Powłoka (shell) – tekstowy interfejs użytkownika w systemach
UNIX/Linux

Powłoka nieustannie realizuje cztery zadania:

wyświetla

prompt

wykonuje

polecenie

przetwarza

polecenie

wczytuje

polecenie

powłoka

background image

Skrypty powłoki

bash

Automatyzacja zadań

Często podczas prac administracyjnych w systemie zachodzi potrzeba
wielokrotnego wykonania tych samych bądź podobnych poleceń.

Celem ułatwienia i ewentualnego zautomatyzowania tych czynności
realizowane polecenia można zapisać w pliku tekstowym.

Pliki tekstowe napisane z pewnymi regułami składni zdefiniowanymi w
danej powłoce nazywane są skryptami.

background image

Skrypty powłoki

bash

Automatyzacja zadań

Skrypty powłoki są plikami tekstowymi ze zgrupowanymi poleceniami
systemu UNIX oraz odpowiednimi strukturami sterującymi.

Podobnie jak programy pisane w wysokich językach programowania,
skrypty pisane i edytowane są w edytorach tekstowych.

Skrypty powłoki nie podlegają procesowi kompilacji i nie są zamieniane na
język maszynowy.

Za wykonanie skryptu odpowiedzialna jest powłoka, która realizuje tutaj
zadanie interpretera.

background image

Rodzaje powłok

bash

System Linux obsługuje wiele typów powłok, w zależności od
upodobań użytkowników.

Bourne Shell (sh), pierwsza powłoka stworzona dla systemu UNIX.

Bourne Again Shell (bash), powłoka napisana przez programistów Free Software
Fundation, shell o charakterze opensource dla systemu GNU.

Korn Shell (ksh), powłoka napisana przez David’a Korn’a. Rozwinięcie powłoki
Bourne

C Shell (csh), powłoka napisana przez Bill’a Joy’a, autora edytora vi. Zawiera wiele
struktur zapożyczonych z języka C.

Terminal Based C Shell (tcsh), rozszerzona wersja powłoki Berkeley UNIX C shell
csh.

Debian Almquist shell (dash), uproszczona wersja bash-a; powłoka domyślna
m.in. w dystrybucjach Ubuntu

background image

Powłoka bash

bash

Najpopularniejszą powłoką jest bash. Jest powłoką domyślną w
przeważającej większości dystrybucji.

W skrypcie można zadeklarować, która powłoka ma go interpretować,
deklarując to w pierwszej linii.

#!/bin/sh

dla Bourne shella (w najnowszych dystrybucjach podlinkowana jest pod ten
skrypt powłoka domyślna

lrwxrwxrwx 1 root root 4 lut 19  2014 /bin/sh ­> bash

W przypadku wymuszenia powłoki Bourne-Again-Shella

#!/bin/bash

background image

Pierwszy skrypt

bash

Najpopularniejszą powłoką jest bash. Jest powłoką domyślną w
przeważającej większości dystrybucji.

Skrypt:

#!/bin/bash
directory=`pwd`
echo The date today is `date`
echo The current directory is $directory

chmod 700 myfirstscript.sh
./myfirstscript.sh

The date today is czw, 26 lut 2015, 22:41:52 CET
The current directory is /home/student/tmp

background image

Programowanie powłoki

bash

Trzy najważniejsze elementy w programowaniu powłoki

Zmienne powłoki, skrypty często potrzebują przechowywać w pamięci
wartości, które zostaną użyte później. Zmienne powłoki są symbolicznymi
nazwami pozwalającymi na dostęp do przechowywanych wartości.

Operatory, powłoka udostępnia wiele różnych operatorów w tym operatory
arytmetyczne

Struktury sterujące, oprócz sekwencyjnej realizacji poleceń zapisanych w
skrypcie (sequential logic) możliwe są również rozgałęzienia (decision
logic), pętle (looping logic) czy wybieranie działania z wielu możliwych
alternatyw (case logic).

background image

Parametry skryptu

bash

./skrypt.sh p1 p2 p3

$0 – ./skrypt.sh (nazwa skryptu), samą nazwę można uzyskać za pomocą

'basename $0'

$1 – p1
$2 – p2
$3 – p3
$# - 3 (liczba argumentów)
$* - wszystkie argumenty jako jeden ciąg znaków
$$ - pid aktualnego procesu (skryptu)
$? – rezultat ostatnio zakończonego polecenia

Polecenie

shift

przesuwa wszystkie argumenty o jeden w lewo

Jeśli $1=”To”, $2=”jest”, $3=”pierwszy”, $4=”skrypt”, to po wykonaniu
polecenia

shift

, mamy: $1=”jest”, $2=”pierwszy”, $3=”skrypt”.

Można również użyć z parametrem określającym wielkość przesunięcia:

shift 2

background image

Znaki specjalne

bash

Znaki specjalne

\z – zamaskowanie specjalnego znaczenia, np. \$
# - rozpoczęcie komentarza (do końca linii)
; - sekwencyjne wykonanie poleceń
& - uruchomienie polecenia w tle
| - łącze komunikacyjne
$ - odwołanie do zmiennej środowiskowej
*,? - substytucja nazw plików
||, && sekwencje warunkowe
< > - przekierowania

background image

Zmienne

bash

Trzy podstawowe kategorie zmiennych: zmienne
konfiguracyjne, zmienne środowiskowe, zmienne powłoki

Zmienne są symbolicznymi nazwami reprezentującymi wartości
przechowywane w pamięci.

Zmienne konfiguracyjne są zmiennymi służącymi do konfiguracji
systemu. Zwykły użytkownik nie powinien ich zmieniać.

Zmienne środowiskowe są zmiennymi służącymi do przechowywania
informacji o bieżącej sesji użytkownika.

Zmienne powłoki to zmiennie, które tworzone są z linii poleceń lub
podczas realizacji skryptu.

background image

Zmienne

bash

Trzy podstawowe kategorie zmiennych: zmienne
konfiguracyjne, zmienne środowiskowe, zmienne powłoki

Zmienne konfiguracyjne i zmienne środowiskowe posiadają
standardowe nazwy takie jak HOME, PATH, SHELL, USERNAME, czy
PWD.

Zmienne konfiguracyjne i zmienne środowiskowe zapisujemy zwykle
dużymi literami w odróżnieniu od zmiennych zdefiniowanych przez
użytkownika zapisywanych małymi literami.

Do wartości zmiennych odwołujemy się poprzez poprzedzenie nazwy
zmiennej znakiem „$”

$ echo $PATH

lub

$ echo ${PATH}

$ echo $myval

lub

 

$ echo ${myval}

background image

Zmienne środowiskowe i konfiguracyjne

bash

Wyświetlanie zmiennych: set oraz printenv

$ set

BASH=/bin/bash
BASH_VERSINFO=([0]="4" [1]="3" [2]="11" [3]="1" [4]="release" 
[5]="x86_64­pc­linux­gnu")
BASH_VERSION='4.3.11(1)­release'
COLORTERM=gnome­terminal
DEFAULTS_PATH=/usr/share/gconf/gnome­fallback­compiz.default.path
DESKTOP_SESSION=gnome­fallback­compiz
DISPLAY=:0.0
GDMSESSION=gnome­fallback­compiz
GDM_LANG=pl_PL

$ printenv

XDG_VTNR=7
XDG_SESSION_ID=c3
CLUTTER_IM_MODULE=xim
SELINUX_INIT=YES
SESSION=gnome­fallback­compiz
GPG_AGENT_INFO=/run/user/1000/keyring­7r5fQ0/gpg:0:1
TERM=xterm
SHELL=/bin/bash

background image

Zmienne środowiskowe i konfiguracyjne

bash

Przykłady najpopularniejszych zmiennych

Zmienna

Opis

PATH

Lista katalogów oddzielonych dwukropkami, w których
wyszukiwane będą polecenia (aplikacje)

EDITOR

Domyślny edytor tekstu

SHELL

Domyślna powłoka

USER
LOGNAME
USERNAME

Nazwa użytkownika

UID

Identyfikator użytkownika

HOME

Katalog domowy użytkownika

LANG
LC_ALL

Ustawienia języka (locale)

TZ

Strefa czasowa

IFS

Domyślny separator

background image

Zmienne środowiskowe i konfiguracyjne

bash

Przykłady najpopularniejszych zmiennych

Zmienna

Opis

PS1

Znak zachęty (prompt); można zdefiniować również PS2,
PS3 oraz PS4

PWD

Bieżący katalog

RANDOM

Wartość losowa (inna przy każdym odwołaniu)

background image

Zmienne

bash

Wartości zmiennych powłoki generalnie ustawiane są w

identyczny sposób (oprócz C-shell)

zmienna=wartosc

$ x=41; echo $x
41
$ unset x; echo $x

W powłoce C-shell do ustalenia wartości zmiennej używane jest polecenie

set.

Zmienne mogą przyjmować konkretne poleceń. Mogą też przyjmować

wynik zadanego polecenia.

$ mydir=`pwd`; echo $mydir

/home/student

background image

Tablice

bash

Definiowanie tablic

tablica=(element1 element2 element3)
echo ${tablica[0]}
echo ${tablica[1]}
echo ${tablica[2]}

Znak „#” pozwala uzyskać długość danego elementu tablicy:

echo ${#tablica[0]}

oraz liczbę elementów tablicy:

echo ${#tablica[@]}

background image

Tablice

bash

Odwołanie do elementów tablicy oraz dodawanie nowych

Odwołanie do elementów tablicy

${nazwa_zmiennej[wska?nik]} 

Wskaźnikami są indeksy elementów tablicy, począwszy od 0 do n oraz @, *.

${nazwa_zmiennej} 

­ odwołanie do elementu 0

${nazwa_zmiennej[@]} lub ${nazwa_zmiennej[*]} ­ wszystkie 
elementy tablicy

Gdy tablica nie zawiera żadnych elementów to odwołanie:

${nazwa_zmiennej[wska?nik]}

zwraca ciąg pusty.

Dodawanie elementów do tablicy

nazwa_zmiennej[wska?nik]=warto?? 
tablica=(element1 element2 element3)
tablica[3]=element4
echo ${tablica[@]}

background image

Operatory

bash

Operatory powłoki można podzielić na cztery kategorie

1. Operatory przypisania

2. Operatory rozwinięcia

3. Operatory arytmetyczne

4. Przekierowania i łącza komunikacyjne

background image

Operator przypisania

bash

Operatory używane do przypisania wartości zmiennej.

Najczęściej używanym operatorem przypisania jest „=”.

Przypisując ciągi znakowe zawierające znaki białe należy je ująć w cudzysłów
(pojedynczy lub zwykły).

uczelnia=”Politechnika Białostocka”

Odwróconych apostrofów używamy, gdy chcemy do zmiennej przypisać wynik
polecenia.

katalog=`pwd`

background image

Operator rozwinięcia

bash

Operatory rozwinięcia używane są do określenia wartości

zmiennej środowiskowej.

Podstawowym operatorem rozwinięcia jest znak „$”, który poprzedza nazwę
zmiennej, której wartość chcemy odczytać.

Przy odwoływaniu się do wartości zmiennej można jej nazwę ująć w cudzysłów (ale
nie w apostrofy).

Różnica pomiędzy znakami cudzysłowu przy rozwijaniu zmiennych

$ echo "$HOME"
/home/student

$ echo '$HOME'
$HOME

background image

Operatory arytmetyczne

bash

Operatory arytmetyczne wykorzystywane do obliczeń

Operator

Opis

-, +

Operator unarny do określania znaku

!, ~

Negacja logiczna (!X zwraca 0, gdy X jest niezerowe ) oraz
negacja bitowa (~X)

*, /, %

Operator mnożenia, dzielenia i reszty z dzielenia

+, -

Dodawanie i odejmowanie

>, <

Operator większości (gt) oraz mniejszości (lt)

>=, <=

Operator mniejszy równy (ge) oraz mniejszy równy (le)

=, !=

Operator równości oraz różności

background image

Przykłady operacji arytmetycznych

bash

Łącznie z operatorami arytmetycznymi mają zastosowania

wszystkie podstawowe reguły matematyczne

Łącznie z operatorami arytmetycznymi mają zastosowania wszystkie podstawowe
reguły matematyczne

$ let a=5+10*2
$ echo $a
25

Domyślnie wartości przechowywane są jako ciągi znakowe

$ number=7+5
$ echo $number
7+5

$ x=2; y=3
$ z1=x+y; z2=$x+$y
$ echo $z1 $z2
x+y 2+3

background image

Przykłady operacji arytmetycznych

bash

Aby wyznaczyć wartość zadanego działania należy użyć

polecenia expr, nawiasów ()

$ x=1
$ expr $x + 100

# spacja przed/po operatorze '+'

101

Przypisanie wartości wyrażenia do zmiennej

$ x=`expr $x + 1` 

# potrzebna spacja przed/po operatorze '+'

$ x=$(expr $x + 1)

# spacja przed/po operatorze '+'

x=$(($x+1))

# bez spacji przed/po operatorze '+'

background image

Operatory przekierowania

bash

Operaory: >, >>, <, |

> plik

- przekierowanie standardowego wyjścia do pliku. Jeżeli plik nie istnieje to

zostanie założony, jeżeli istnieje to jego zawartość zostanie skasowana

$ echo 'tekst' > file.txt

>> plik

- przekierowanie standardowego wyjścia do pliku. Jeżeli plik nie istnieje

to zostanie założony, jeżeli istnieje to wynik polecenia zostanie dodany do
zawartości pliku

$ echo 'tekst' >> file.txt

< plik 

- przekierowanie standardowego wejścia z pliku.

$ echo "5 7 8" > tmp
$ read a b c < tmp
$ echo $a ­ $b ­ $c
5 ­ 7 ­ 8

background image

Łącze komunikacyjne - Potoki

bash

Kilka komend możemy połączyć potokiem, rozdzielając je

metaznakiem „|”

$ ls ­al | grep ­i txt | more

Powyższe polecenie zbudowane jest z poleceń

$ ls ­al > tmp
$ grep txt tmp > tmp
$ more tmp

Dodatkowo należałoby skasować pliki pośrednie

$ rm tmp

background image

Strumienie

bash

stdin, stdout, stderr

stdin

– standardowe wejście (deskryptor 0) — zwykle klawiatura komputera

stdout – standardowe wyjście (deskryptor 1) — zwykle terminal
stderr

– standardowe wyjście błędów (deskryptor 2) — zwykle terminal

Przykład: wylistowanie dwóch plików z których tylko jeden istnieje

$ ls ­al a.txt b.txt

ls: nie ma dost?pu do b.txt: Nie ma takiego pliku ani katalogu
­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

Przekierowanie stdout do pliku

$ ls ­al a.txt b.txt > plik.ok

ls: nie ma dost?pu do b.txt: Nie ma takiego pliku ani katalogu

$ cat plik.ok

­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

Przekierowanie stderr do pliku

$ ls ­al a.txt b.txt 2> plik.err

­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

$ cat plik.err

ls: nie ma dost?pu do b.txt: Nie ma takiego pliku ani katalogu

background image

Strumienie

bash

stdin, stdout, stderr

Przekierowanie danych ze strumieni do różnych plików

$ ls ­al a.txt b.txt 2> plik.err 1> plik.ok
$ cat plik.err 

ls: nie ma dost?pu do b.txt: Nie ma takiego pliku ani katalogu

$ cat plik.ok

­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

Przekierowanie danych ze strumieni stdout i stderr do tego samego pliku

$ ls ­al a.txt b.txt &> plik.err
$ cat plik.err 

ls: nie ma dost?pu do b.txt: Nie ma takiego pliku ani katalogu
­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

Jeśli nie jesteśmy zainteresowani danymi z jakiegoś strumienia, możemy go
przekierować do urządzenia nieistniejącego

/dev/null

$ ls ­al a.txt b.txt 2> /dev/null

­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

background image

Strumienie

bash

stdin, stdout, stderr

Przekierowanie danych ze strumienia stdout do stderr.

$ ls ­al a.txt b.txt 1>&2

ls: nie ma dost?pu do b.txt: Nie ma takiego pliku ani katalogu
­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

Domyślnie stdin i stderr wskazują na terminal, stąd w poprzednim przykładzie nie
widać, czy strumień stdin został przekierowany. Przekierujmy więc stderr do pliku.

$ ls ­al a.txt b.txt 2> plik.err 1>&2
$ cat plik.err

ls: nie ma dost?pu do b.txt: Nie ma takiego pliku ani katalogu
­rw­rw­r­­ 1 student student 76 mar  6 23:37 a.txt

A jak zinterpretować poniższe polecenie?

$ program <dane.txt >wyniki.txt 2>bledy.txt &

background image

Strumienie

bash

Przykłady

Kasowanie plików

core

bez żadnych komunikatów (często używane polecenie w

cron-ie)

$ rm ­f $(find / ­name core) &> /dev/null

 

background image

Eksport zmiennych

bash

Zmienne, które nie są wyeksportowane nie będą widziane ani w

skryptach ani w uruchomionych programach (procesach

potomnych).

$ cat myscript 

echo '====='
echo $A
echo '====='

$ A=hello
$ echo $A
hello
$ ./myscript

=====

=====

$ export A
$ ./myscript

=====
hello
=====

Przesłanianie zmiennych

$ echo $A
hello
$ A=witaj ./myscript

=====
witaj
=====

background image

Struktury sterujące

bash

if, while, for, until, case

if … then … else … fi

if … then …elif … else … fi

for … in … do … done

while … do … done

until … do … done

case … in … esac

background image

Struktury sterujące

bash

Przykład: if

echo –n "Enter your password: "
read input
if 

[ $input = "secret" ]

then
        echo "welcomed ­­ “

     echo “to the secret world!”

else
        echo "go away!"
fi

Poniższe instrukcje są równoważne:

if  

test $input = “secret”

if 

[ $input = "secret" ]

background image

Struktury sterujące

bash

Skrócony zapis instrukcji warunkowej

|| - gdy instrukcja ma się wykonać przy niespełnionym warunku

if test $x –ne $y
then

echo „warto?? x jest ró?na od warto?ci y”

fi

Powyższą instrukcję można zapisać jako:

test $x –eq $y  || echo „warto?? x jest ró?na od warto?ci y”

background image

Struktury sterujące

bash

Skrócony zapis instrukcji warunkowej

&& - gdy instrukcja ma się wykonać przy spełnionym warunku

if test $x –eq $y
then

echo „warto?? x jest równa warto?ci y”

fi

Powyższą instrukcję można zapisać jako:

test $x –eq $y  &&  echo „warto?? x jest równa warto?ci y”

background image

Struktury sterujące

bash

Przykład: while

while 

[ "$input" != "secret" ]

do
        echo "Enter your password"
        read input
done
echo "welcome!"

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
count=1;
limit=10;
while [ $count ­lt $limit ] 
do

sleep 5; echo “Get up and do some exercise”
count=`expr  $count + 1`

done

background image

Struktury sterujące

bash

Przykład: while w pętli nieskończonej

while 

[ 1 ]

do
        echo ­n "Enter your password"
        read input
        if 

[ $input = "secret" ]

        then
                break
        else
                echo ­n "Try again... "
        fi
done

background image

Struktury sterujące

bash

Przykład: until

secret='haslo'
until 

[ "$input“ != "secret" ]

do
        echo ­n"Enter your password: "
        read input
done

echo "welcome!"

background image

Struktury sterujące

bash

Przykład: case

echo "Podaj cyfre z przedzialu 0­3"
read d
case "$d" in
  "0") echo "zero" ;;
  "1") echo "jeden" ;;
  "2") echo "dwa" ;;
  "3") echo "trzy" ;;
    *) echo "Wprowadzono bledne dane"
esac

background image

Rodzaje warunków

bash

Porównania ciągów znakowych oraz arytmetyczne

Porównanie ciągów znakowych

string1 == string2

– czy dwa ciągi znakowe są sobie równe

­n string1

– string1 jest różny od null

­z string1

– string1 jest null

Alternatywnie można wykorzystać warunek:

if [ ”x$string” = ”x” ]

Porównania arytmetyczne

exp1 –eq exp2

– dwie wartości są sobie równe

exp1 –ne exp2

– dwie wartości są różne

­gt, ­ge, ­lt, ­le – >, >=, <, <=
!exp1

– prawda jeżeli exp1 jest false

background image

Wzorce

bash

Użycie podwójnych nawiasów określających warunek pozwala

wykorzystać wzorce.

Do sprawdzenia czy pierwszy parametr przekazany do skryptu

rozpoczyna się od znaku „-” za którym jest liczba można użyć

następującej konstrukcji:

if [[ "$1" ==  ­[0­9]+ ]]
then
   ….

Do sprawdzenia czy zmienna input ma postać abc po czym może

wystąpić cyfra, można użyć następującej konstrukcji:

if [[ "$input" =  abc[0­9]* ]]
then
   ….

background image

Warunki dotyczące plików

bash

Wybrane klucze dotyczące plików

-d file: prawda jeżeli file jest katalogiem

-e file: prawda jeżeli istnieje plik file

-f file: prawda jeżeli file jest regularnym plikiem

-r file: prawda jeżeli posiadamy prawo czytania pliku (-w, -x)
-s file: prawda jeżeli rozmiar pliku jest większy niż 0

if [ ­f file.txt ];
then
  echo 'Plik file.txt istnieje'
fi

background image

Funkcje

bash

Słowo kluczowe: function

#!/bin/bash 

function fun1 {
  echo ”hi”
}  

function fun2 {
  echo $1 
}  

fun1
fun2 Hello
fun2 World
                

script.sh

$ ./script.sh
hi
Hello
World

background image

Wykonywanie poleceń w tle

bash

Wykonywanie poleceń w tle

$ ls ­al &

[1] 27121
$ razem 10652
drwxrwxr­x 3 student student    4096 mar  8 14:14 .
drwxrwxr­x 6 student student    4096 lut 20 17:20 ..
­rw­rw­r­­ 1 student student  816503 mar  4 21:32 abc.txt 
­rw­rw­r­­ 1 student student  340576 mar  4 21:32 cba.txt 

znak zachęty wypisany przed wykonaniem polecenia

PID procesu wykonywanego w tle

Grupowanie poleceń wykonywanych w tle

$ (echo „Pliki z bie??cego katalogu”; ls ­al) &

background image

Substytucje

bash

Substytucje

Substytucje zmiennych środowiskowych

Substytucje nazw plików
Substytucje poleceń

Aliasy

Substytucje zawsze wykonywane są przed wykonaniem

polecenia

background image

Substytucje poleceń

bash

Substytucje zawsze wykonywane są przed wykonaniem polecenia

Substytucja poleceń polega na wykonaniu polecenia ujętego w

odwrócone apostrofy przed realizacją polecenia głównego.

$ A=`pwd`

$ echo '$A'

$A

$ echo $A

/home/student

$ echo ”$A”

/home/student

background image

Substytucja nazw plików

bash

Substytucja nazw plików polega na rozwijaniu określonych

metaznaków w nazwy plików.

*

- Pasuje do każdej nazwy, także do pustej

?

- Pasuje do każdego znaku

[…]

- Pasuje do każdego znaku zawartego między nawiasami

[x­y]

- Pasuje do każdego znaku z zakresu x-y

[!...]

- Pasuje do wszystkich znaków z wyjątkiem występujących po "!"

Wszystkie pliki z rozszerzeniem .txt

$ ls ­al *.txt

Pliki rozpoczynające się małą literą 'a' oraz kończące się małą literą 'z'

$ ls ­al a*z

Pliki rozpoczynające się od litery

$ ls ­al [a­zA­Z]*

background image

Aliasy

bash

Aliasy umożliwiają skrócenie długich poleceń lub połączenie serii poleceń

w jedno.

Definiowanie aliasu:

$ alias la="ls ­la"
$ alias clean="rm *~ .*~ core *.bak”

$ la

­rw­rw­r­­  1 student student    124 mar  6 23:55 plik.err
­rw­rw­r­­  1 student student     60 mar  6 23:47 plik.ok

Usunięcie aliasu:

$ unalias la
$ la

la: nie znaleziono polecenia

background image

Historia poleceń

bash

Większość powłok zachowuje poprzednie polecenia i pozwala się do nich

odwoływać w poleceniu bieżącym. Mechanizm ten nosi nazwę

substytucji historycznej. Substytucja historyczna dokonuje się, gdy ciąg

znaków rozpoczyna się od wykrzyknika.

!$

- ostatni element ostatniego polecenia

$ gunzip groff.1.05.tar.gz
$ tar ­xvf !$
tar ­xvf groff.1.05.tar.gz

!!

(

!:

) - powtórz ostatnie polecenie

$ ls –l /etc
….

$ !! | more

background image

Przykład skryptu

bash

Wylistowanie 10 (lub podanej jako parametr liczby) największych

plików w drzewie podkatalogów.

#!/bin/bash

if [[ "$1" == ­[0­9]* ]]
then
  for path in $*
  do
    if [ $path != $1 ]
    then
      path_list="$path_list $path"
    fi
  done
  ls ­Rl $path_list | sort ­k 5 ­nr | head $1
else
  ls ­Rl $* | grep ^­ | sort ­k 5 ­nr | head ­10
fi


Document Outline


Wyszukiwarka

Podobne podstrony:
II SaRzU4 05 skrypt
z1 SO na 28.05.11 w2 ze skryptami, Informatyka, SEMESTR IV, Systemu Operacujne
05 Skrypt - XIX wiek, Pedagogika UKSW
Mechanika Techniczna I Skrypt 5 05
praca+magisterska+ +marcin+bialas+ +2005 04 05+php+jako+j%eazyk+skryptowy+zarz%b9dzaj%b9cy+bazami+da
FWD FWD PD pracownia, algorytmy, 05 Slanie lozka z chorym przez jedna osobe skrypt
Skrypt Studium Terapii Uzależnień, 05. Diagnozowanie uzaleĹĽnienia od alkoholu, Diagnozowanie uzależ
05.Spondyl olisthesis, Dokumenty szkoła, Skrypt
praca+magisterska+ +marcin+bialas+ +2005 04 05+php+jako+j eazyk+skryptowy+zarz b9dzaj b9cy+bazami+da
05 ren sprzedaż skrypt
05 [Skrypt] Hydroliza estru zasadowa
podrecznik 2 18 03 05
regul praw stan wyjątk 05
05 Badanie diagnostyczneid 5649 ppt
Podstawy zarządzania wykład rozdział 05
05 Odwzorowanie podstawowych obiektów rysunkowych
06 pamięć proceduralna schematy, skrypty, ramyid 6150 ppt
05 Instrukcje warunkoweid 5533 ppt

więcej podobnych podstron