05 WDL SkryptyBash


Programowanie w
bash-u
dr inż. Ireneusz Mrozek
dr inż. Andrzej Chmielewski
Wydział Informatyki
Politechniki Białostockiej
Powłoka systemowa
Powłoka (shell)  tekstowy interfejs użytkownika w systemach
UNIX/Linux
Powłoka nieustannie realizuje cztery zadania:
wyświetla
prompt
wczytuje wykonuje
polecenie polecenie
powłoka
przetwarza
polecenie
bash
Skrypty powłoki
Automatyzacja zadań
Często podczas prac administracyjnych w systemie zachodzi potrzeba
wielokrotnego wykonania tych samych bądz 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.
bash
Skrypty powłoki
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.
bash
Rodzaje powłok
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.
bash
Debian Almquist shell (dash), uproszczona wersja bash-a; powłoka domyślna
m.in. w dystrybucjach Ubuntu
Powłoka 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
bash
Pierwszy skrypt
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
bash
Programowanie powłoki
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ózniej. 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).
bash
Parametry skryptu
./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
bash
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
Znaki specjalne
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
bash
Zmienne
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.
bash
Zmienne
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}
bash
$ echo $myval lub $ echo ${myval}
Zmienne środowiskowe i konfiguracyjne
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 bash
SELINUX_INIT=YES
SESSION=gnome-fallback-compiz
GPG_AGENT_INFO=/run/user/1000/keyring-7r5fQ0/gpg:0:1
TERM=xterm
SHELL=/bin/bash
Zmienne środowiskowe i konfiguracyjne
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 Nazwa użytkownika
LOGNAME
USERNAME
UID Identyfikator użytkownika
HOME Katalog domowy użytkownika
LANG Ustawienia języka (locale)
LC_ALL
bash
TZ Strefa czasowa
IFS Domyślny separator
Zmienne środowiskowe i konfiguracyjne
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)
bash
Zmienne
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.
bash
$ mydir=ÁpwdÁ; echo $mydir
/home/student
Tablice
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[@]}
bash
Tablice
Odwołanie do elementów tablicy oraz dodawanie nowych
Odwołanie do elementów tablicy
${nazwa_zmiennej[wska?nik]}
Wskaznikami 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
bash
nazwa_zmiennej[wska?nik]=warto??
tablica=(element1 element2 element3)
tablica[3]=element4
echo ${tablica[@]}
Operatory
Operatory powłoki można podzielić na cztery kategorie
1. Operatory przypisania
2. Operatory rozwinięcia
3. Operatory arytmetyczne
4. Przekierowania i Å‚Ä…cza komunikacyjne
bash
Operator przypisania
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Á
bash
Operator rozwinięcia
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
bash
Operatory arytmetyczne
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
bash
Przykłady operacji arytmetycznych
AÄ…cznie z operatorami arytmetycznymi majÄ… zastosowania
wszystkie podstawowe reguły matematyczne
AÄ…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
bash
$ echo $z1 $z2
x+y 2+3
Przykłady operacji arytmetycznych
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 ©+©
bash
Operatory przekierowania
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
bash
AÄ…cze komunikacyjne - Potoki
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
bash
Strumienie
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
bash
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
Strumienie
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
bash
-rw-rw-r-- 1 student student 76 mar 6 23:37 a.txt
Strumienie
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 wyniki.txt 2>bledy.txt &
bash
Strumienie
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
bash
Eksport zmiennych
Zmienne, które nie są wyeksportowane nie będą widziane ani w
skryptach ani w uruchomionych programach (procesach
potomnych).
$ cat myscript Przesłanianie zmiennych
echo ©=====©
echo $A
$ echo $A
echo ©=====©
hello
$ A=witaj ./myscript
$ A=hello
=====
$ echo $A
witaj
hello =====
$ ./myscript
=====
=====
bash
$ export A
$ ./myscript
=====
hello
=====
Struktury sterujÄ…ce
if, while, for, until, case
if ź then ź else ź fi
if ź then źelif ź else ź fi
for ź in ź do ź done
while ź do ź done
until ź do ź done
bash
case ź in ź esac
Struktury sterujÄ…ce
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:
bash
if test $input = ªsecretº
if [ $input = "secret" ]
Struktury sterujÄ…ce
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º
bash
Struktury sterujÄ…ce
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º
bash
Struktury sterujÄ…ce
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
bash
sleep 5; echo ªGet up and do some exerciseº
count=Áexpr $count + 1Á
done
Struktury sterujÄ…ce
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
bash
Struktury sterujÄ…ce
Przykład: until
secret=©haslo©
until [ "$inputª != "secret" ]
do
echo -n"Enter your password: "
read input
done
echo "welcome!"
bash
Struktury sterujÄ…ce
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
bash
Rodzaje warunków
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 Ä… >, >=, <, <=
bash
!exp1  prawda jeżeli exp1 jest false
Wzorce
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
bash
ź.
Warunki dotyczące plików
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
bash
Funkcje
SÅ‚owo kluczowe: function
script.sh
#!/bin/bash
$ ./script.sh
hi
function fun1 {
Hello
echo ºhiº
World
}
function fun2 {
echo $1
}
fun1
fun2 Hello
bash
fun2 World
Wykonywanie poleceń w tle
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) &
bash
Substytucje
Substytucje
Substytucje zmiennych środowiskowych
Substytucje nazw plików
Substytucje poleceń
Aliasy
Substytucje zawsze wykonywane sÄ… przed wykonaniem
polecenia
bash
Substytucje poleceń
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
bash
Substytucja nazw plików
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
bash
Pliki rozpoczynajÄ…ce siÄ™ od litery
$ ls -al [a-zA-Z]*
Aliasy
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
bash
Historia poleceń
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
bash
Przykład skryptu
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
bash
fi


Wyszukiwarka

Podobne podstrony:
Turystyka Zrównoważona SKRYPT (bez 05 19)
Skrypt 05
05 Slanie lozka z chorym przez jedna osobe skrypt
8 37 Skrypty w Visual Studio (2)
Wykład 05 Opadanie i fluidyzacja
Prezentacja MG 05 2012
2011 05 P
05 2
ei 05 08 s029
ei 05 s052
MATLAB cw Skrypty

więcej podobnych podstron