- Stahuj zápisky z přednášek a ostatní studijní materiály
- Zapisuj si jen kvalitní vyučující (obsáhlá databáze referencí)
- Nastav si své předměty a buď stále v obraze
- Zapoj se svojí aktivitou do soutěže o ceny
- Založ si svůj profil, aby tě tví spolužáci mohli najít
- Najdi své přátele podle místa kde bydlíš nebo školy kterou studuješ
- Diskutuj ve skupinách o tématech, které tě zajímají
Studijní materiály
Zjednodušená ukázka:
Stáhnout celý tento materiálor.
Přkazy se mohou sdružovat pomocí závorek.
Př.: $ date; ls >file1
$ (date; ls) >file1
Př.: $ (sleep 5; date) & date
Progamování v shellu
--------------------
Dávky (scénáře, skripty)
------------------------
# Toto je poznámka ve skriptu. Znak "#" musí být na začátku řádku, nebo
bla bla bla # musí být oddělený od příkazů mezerou.
Spouštění dávky:
$ sh dávka # spustí se kopie shellu
$ . dávka # spouští tento shell; vhodné pro nastavování proměnných
$ dávka # musí být nastaveno právo x
#! /bin/ksh standardní začátek skriptu. Určujeme tím, který
shell má dávku interpretovat v případě, že bude
spuštěna jako příkaz (tj. nebude spuštěna jako
parametr shellu).
Ladění scénářů:
$ sh -x dávka
$ sh -xv dávka
Zneplatnění zvláštního významu metaznaků
----------------------------------------
'...' zneplatní vše
"..." interpretuje $, `...`, \
\ zneplatňuje následující znak
Př.: $ echo $HOME * \\a `pwd`
$ echo "$HOME * \\a `pwd`"
$ echo '$HOME * \\a `pwd`'
Argumenty skriptu
-----------------
Název programu: $0
Poziční parametry: $1, $2, $3, ..., $9
Všechny arumenty: $*
Počet argumentů: $#
shift - posuv argumentů (použijeme, pokud je argumentů víc než 9)
Testování podmínek
------------------
Každý program produkuje při svém ukončení a návratu do shellu exit status.
$ echo $? zjistí exit status posledního příkazu
Pokud je exit status 0, skončil program úspěšně, jinak došlo k nějaké chybě.
Podmínka v shellu je pravdivá, pokud je 0.
Příkaz test - dvě formy zápisu
1) test -přepínač argument
2) [ -přepínač argument ]
kolem závorek musí být na obou stranách mezery
Příklady použití:
test $a, [ $a ] je proměnná a definovaná?
test -f file1, [ -f file1 ] existuje obyčejný soubor file1?
test -r file1, [ -r file1 ] existuje soubor file1 a je čitelný?
podobně -w, -x
test -d file1, [ -d file1 ] existuje soubor file1 a je to adresář?
test -s file1, [ -s file1 ] existuje soubor file1 a je větší než 0 Byte?
test -h file1, [ -h file1 ] existuje soubor file1 a je to symbolický link?
test -n str1, [ -n str1 ] je délka řetězce str1 větš než 0?
test str1 = str2, [ str1 = str2 ] jsou řetězce str1 a str2 stejné?
!= ... různé
test n1 -eq n2, [ n1 -eq n2 ] jsou čísla n1 a n2 shodná?
další možnosti: -ne (různá), -gt (větší než), -ge (větší nebo rovno), ...
viz. man test
!!! Bacha na rozdíl mezi porovnáváním řetězců (=) a čísel (-eq).
Na podmínky se mohou aplikovat logické operátory AND (-a) a OR (-o).
Př.: [ -f file1 -a $prom = "ahoj" ]
Programové konstrukce
---------------------
if podmínka1 Př. $ if [ "" != `who | grep xnovak00` ]
then příkaz1 > then echo xnovak00 je přihlášen
elif podmínka2 > else echo xnovak00 není přihlášen
then příkaz2 > fi
...
else příkazn
fi
Př. Test exit statusu programu (rm).
$ if rm file1 2>/dev/null
> then echo file1 byl smazán
> else echo soubor file1 neexistuje
> fi
while podmínka
do příkazy
done
until podmínka
do přkazy
done
case slovo in
vzor1) příkaz1;;
vzor2) příkaz2;;
...
esac
Ve vzorech lze použít regulární vyrazy (*, ?, [a-z], [1,2,3]).
for proměnná in seznam $ for i in 1 2 3 4
do příkazy > do echo $i
done > done
Př.: Všem uživatelům systému zašli zprávu
# zbytečně složité - pouze pro ilustraci for
# stačilo by: mail `cat /etc/passwd | cut -d: -f1` do
> mail $i done
exit - předčasné ukončení scénáře
read - načtení hodnoty z klávesnice do proměnné
Jestliže se interpretuje výstup ze zpětných apostrofů (for i in `ls`),
považuje se znak konec řádku za oddělovač slov.
Příklad na for, if a case.
Maže soubory v aktuálním adresáři. Před každým smazáním se pro jistotu zeptá.
#! /bin/ksh
for i in * # for i in `ls` přes všechny soubory
do
if [ -f $i ] # je-li to obyčejný soubor
then
echo Smazat $i?
read tak_co
case $tak_co in
y|Y|a|A|yes|YES|ano|ANO) rm $i;;
n|N|no|NO|ne|NE) echo nemažu $i;;
q|Q|quit|QUIT) echo konec; exit;;
esac
fi
done
Pro předčasné opuštění těla cyklu lze použít příkazy break a continue.
(Stejně jako v C.)
od - výpis obsahu (binárnho souboru)
which - zjistí adresář, ve kterém se nachází spustitelný soubor
file - zjistí typ souboru
du - vypíše velikost adresáře
df - zjistí volné místo na discích
cmp, diff - porovnávání souborů
sed, grep
=========
1) sed - proudový editor
spouštění:
a) sed 'seznam_příkazů' soubory
b) sed 'seznam_příkazů' # čte stdin
c) sed -f cmd_file # příkazy čte ze souboru cmd_file
Parametry sedu:
-i nerozlišovat malá a velká písmena
-w vybírat jen řádky, na nichž vzoru vyhovuje celé slovo
-v negovat výsledek (vypisovat řádky, které nevyhovují vzoru)
Příkazy odpovídají příkazům editoru ed.
- bez uvedení rozsahu platí na každý řádek
- nelze použít relativní definice rozsahu (-3,+5) - jeden průchod
- vzory: ., x*, .*, [abc], [^abc], [a-z], [^a-z], ^, $
- rozsah lze zadat dvojicí vzorů:
$ ... | sed '/BEGIN/,/^$/s/text1/text2/g' | ... # s - substituce
nahradí všechny výskyty text1 za text2 na řádcích od prvního
výskytu slova BEGIN do prvního následujícího prázdného řádku (^$)
- implicitní vlastností sedu je výpis řádku, takže
$ sed 10p soubor.txt
výpíše celý soubor soubor.txt a 10. řádek tam bude dvakrát.
- tuto vlastnost lze potlačit přepínačem -n:
$ sed -n 10p soubor.txt
vypíše jenom 10. řádek.
- negace rozsahu - příkaz se provede pouze na řádcích, které neodpovídají
vzoru:
$ sed '10,20!s/ahoj/čau/g' soubor.txt
provede substituce na všech řádcích vyjma od 10. do 20.
další příkazy:
q - ukončí sed:
$ sed 10q soubor.txt
vypíše prvních 10 řádků a pak skončí.
y - náhrady jednotlivých znaků
$ sed 'y/abcd/ABCD/' soubor.txt
nahradí písmena a,b,c,d odpovídajícími velkými písmeny.
d - vymaže všechny řádky mezi řádky vyhovující intervalu daném reg. výrazy
$ sed '/vzor1/,/vzor2/d' soubor.txt
2) tr - převod znaků
- není vázaný tak jako sed na jednotlivé řádky, tj. nepředpokládá
textový soubor. Mohou se nahrazovat (mazat) libovolné znaky.
- pracuje jako čístý filtr => neumí si otevřít soubor.
Př.:
$ tr [a-z] [A-Z]
Vloženo: 4.06.2009
Velikost: 23,11 kB
Komentáře
Tento materiál neobsahuje žádné komentáře.
Copyright 2025 unium.cz


