Skriptování v Bournově shellu/Příloha C: Rychlý přehled
Užitečné příkazy
| Příkaz | Výsledek |
|---|---|
cat
|
Vypsání obsahu zadaného souboru či souborů. |
cd
|
Změna adresáře. |
chmod ugo+rwx
|
Povolení čtení, zápisu i spouštění pro uživatele, skupinu i ostatní. |
chmod a-rwx
|
Odebrání práv čtení, zápisu i spouštění všem. |
chmod 775
|
Povolení čtení a spouštění všem, zápisu pouze uživateli. |
chmod 644
|
Povolení čtení všem, zápisu pouze uživateli. |
cp
|
Kopírovaní souboru či souborů. |
expr 2 + 2
|
Sečte dva a dva a vypíše výsledek. |
fgrep
|
Prohledá řetězec na výskyt jiného. |
grep
|
Hledání výskytu řetězce odpovídajícího zadanému regulárnímu výrazu. |
grep -v
|
Hledání řádků, na kterých se nevyskytuje řetězec odpovídající regulárnímu výrazu. |
grep -n
|
Výpis čísel řádků splňujících hledání. |
grep -i
|
Při porovnáván řetězců ignoruje rozdíly ve velikosti písmen. |
grep -l
|
Pro nalezené řádky vypíše jen jméno souboru, v kterém byly. |
head -n5 source.txt
|
Vypíše prvních pět řádků. |
less
|
Vypíše textový soubor po obrazovkách, přičemž umožňuje skrolování oběma směry. |
ll
|
Podobný výpis souborů. |
ls
|
Stručný výpis souborů. |
mkdir
|
Vytvoření adresáře. |
more
|
Zobrazuje soubor po obrazovkách. |
mv
|
Přesunuje nebo přejmenovává soubory. |
paste f1 f2
|
Spojí soubory po sloupcích. |
pg
|
Varianta příkazu more; vypisuje text po obrazovkách.
|
pwd
|
Vypíše jméno a cestu pracovního adresáře. |
rm
|
Odstraňuje soubory. |
rm -r
|
Odstraňuje soubory rekurzivně, tj. odstraní celý adresářový podstrom. |
rmdir
|
Odstraní prázdný adresář. |
sed 's/txt/TXT/g'
|
Nahradí všechny výskyty řetězce „txt“ řetězcem „TXT“. |
sed '/txt/d'
|
Najde a odstraní řádky s výskytem řetězce „txt“. |
sed '/txt/q'
|
Najde řádek obsahující řetězec „txt“ a ukončí se. |
sort
|
Seřadí vstup. |
sort +1
|
Seřadí vstup, ale při řazení ignoruje první pole. |
sort -n
|
Seřadí vstup podle pravidel pro řazení čísel. |
sort -r
|
Seřadí v opačném pořadí. |
sort -u
|
Seřadí s vypuštěním duplicitních řádků. |
tail -5 source.txt
|
Vypíše posledních pět řádků |
tail +5 source.txt
|
Vypíše řádky od páté do konce souboru. |
tr '[A-Z]' '[a-z]'
|
Provede záměnu pímen z velkých na malá. |
tr '[a-z]' '[A-Z]'
|
Provede záměnu písmen z malých na velká. |
tr -d '_'
|
Vymaže všechna podtržítka. |
uniq
|
Nalezne jedinečné řádky. |
wc
|
Spočítá slova (a znaky a řádky). |
wc -w
|
Spočítá pouze slova. |
wc -l
|
Spočítá pouze řádky. |
Základní shellové obraty
| Příkaz | Smysl |
|---|---|
shvar="Test 1"
|
Rovnítko inicializuje proměnnou prostředí na zadanou hodnotu. |
echo $shvar
|
Vypíše obsah proměnné. |
export shvar
|
Zpřístupní obsah proměnné i podshellům. |
mv $f ${f}2
mv ${f}{,2}
|
Přejmenuje soubor s názvem uloženým v proměnné na jméno s přidanou dvojkou. |
$1, $2, $3, ...
|
Proměnné zpřístupňují parametry, které dostal skript při svém zavolání na příkazové řádce. |
$0
|
Jméno prováděného programu. |
$#
|
Počet parametrů z příkazové řádky. |
$*
|
Úplný seznam parametrů (vše v jednom řetězci). |
$@
|
Úplný seznm parametr (zvláštní řetězec pro každý parametr). |
$?
|
Návratová hodnota posledního provedeného příkazu. |
shift 2
|
Posun proměnných s parametry o dva. |
read v
|
Načte vstup do proměnné „v“. |
. mycmds
|
Začne provádět příkazy ze zadaného souboru. |
Podmíněné příkazy
Příkaz podmínky „if“ nejprve provede příkaz mezi if a then. Pokud je jeho návratová hodnota nulová, pak provede příkazy mezi then a else, pokud nenulová, provede příkazy mezi else a fi.
Varianty syntaxe testů
Většinu příkazů podmínek lze formulovat pomocí testových příkazů několika způsoby. Z hlediska kultury programování je pravděpodobně nejlepší naučit se výborně jeden z nich a ten pak používat.
Testování řetězců
K zkoumání řetězců se používá příkaz test, případně jeho alias [ … ]
| Příkaz | Smysl |
|---|---|
test "$shvar" = "heslo"
[ "$shvar" = "heslo" ]
|
Porovnání dvou řetězců pravdivé v případě shody. |
test "$shvar" != "heslo"
[ "$shvar" != "heslo" ]
|
Porovnání dvou řetězců pravdivé v případě neshody |
test -z "${shvar}"
test "$shvar" = ""
[ "$shvar" = "" ]
|
Pravdivé, jde-li o prázdnou proměnnou. |
test -n "${shvar}"
test "$shvar" != ""
[ -n "$shvar" ]
[ "$shvar" != "" ]
|
Pravdivé, jde-li o neprázdnou proměnnou. |
Číselné testy
Jednoduché počty lze provádět přímo příkazem test, složitější příkazem let, ke kterému existuje přezdívka (( … )).
| Příkaz | Význam |
|---|---|
test "$nval" -eq 0
let 'nval == 0'
[ "$nval" -eq 0 ]
(( nval == 0 ))
|
Pravdivé, je-li proměnná rovna 0. |
test "$nval" -ge 0
let 'nval >= 0'
[ "$nval" -ge 0 ]
(( nval >= 0 ))
|
Pravdivé, je-li proměnná větší nebo rovna nula. |
test "$nval" -gt 0
let 'nval > 0'
[ "$nval" -gt 0 ]
(( nval > 0 ))
|
Pravdivé, je-li proměnná kladná. |
test "$nval" -le 0
let 'nval <= 0'
[ "$nval" -le 0 ]
(( nval <= 0 ))
|
Pravdivé, je-li proměnná menší nebo rovna nule. |
test "$nval" -lt 0
let 'nval < 0'
[ "$nval" -lt 0 ]
(( nval < 0 ))
|
Pravdivé, je-li proměnná záporná. |
test "$nval" -ne 0
let 'nval != 0'
[ "$nval" -ne 0 ]
(( nval != 0 ))
|
Pravdivé, je-li proměnná různá od nuly. |
let 'y + y > 100'
(( y + y >= 100))
|
Pravdivé, pokud |
Souborové testy
| Příkaz | Význam |
|---|---|
test -d tmp
[ -d tmp ]
|
Pravdivé, je-li „tmp“ adresář. |
test -f tmp
[ -f tmp ]
|
Pravdivé, je-li „tmp“ obyčejný soubor. |
test -r tmp
[ -r tmp ]
|
Pravdivé, lze-li „tmp“ číst. |
test -s tmp
[ -s tmp ]
|
Pravdivé, má-li „tmp“ nenulovou délku. |
test -w tmp
[ -w tmp ]
|
Pravdivé, lze-li do „tmp“ zapisovat. |
test -x tmp
[ -x tmp ]
|
Pravdivé, je-li „tmp“ spustitelné. |
Booleovská aritmetika
Booleovská aritmetika je implementována v rámci příkazu „test“, respektive v rámci zvláštního příkazu [[.
| Příkaz | Význam |
|---|---|
test -d /tmp && test -r /tmp
[[-d /tmp && -r /tmp]]
|
Pravdivé, je-i „/tmp“ adresář s právem čtení. |
test -r /tmp <nowiki>||</nowiki> test -w /tmp
[[ -r /tmp || -w /tmp ]]
|
Pravdivé, pokud může být do „/tmp“ zapisováno i z něj čteno. |
test ! -x /tmp
[[! -x /tmp]]
|
Pravdivé, pokud není „/tmp“ spustitelný. |
Příkaz CASE
Cykly
K cyklům patří také příkazy „break“ a „continue“ k předčasnému ukončení cyklení a k přeskočení na další iteraci.
V příkladech výše je „[…]“, ale samozřejmě můžeme použít i test. Při použití hranatých závorek je důležité nezapomenout, že kolem sebe chtějí mezery.