Skriptování v Bournově shellu/Příloha C: Rychlý přehled

Z Wikiknih
◄ Skriptování v Bournově shellu/Příloha B: Přehled prostředí Příloha C: Rychlý přehled Skriptování v Bournově shellu/Příloha D: Kuchařka ►

Užitečné příkazy[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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.

if test "${1}" = "red" ; then
	echo "Neplatny kod."
elif test "${1}" = "blue" ; then
	echo "Neplatny kod."
else
	echo "Povolen pristup."
fi

if [ "$1" = "red" ]
then
	echo "Neplatny kod."
elif [ "$1" = "blue" ]
then
	echo "Neplatny kod."
else
	echo "Povolen pristup."
fi

Varianty syntaxe testů[editovat | editovat zdroj]

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ů[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

case "$1" in
	"sezame")
		echo "Chybne heslo."
		exit
		;;
	"Sezame")
		echo "Chybne heslo."
		exit
		;;
	"x"|"y")
		echo "Chybne heslo."
		exit
		;;
	*)
		echo "Pristup povolen."
		;;
esac

Cykly[editovat | editovat zdroj]

for nvar in 1 2 3 4 5
do
	echo $nvar
done
for file     # prochází parametry z příkazového řádku
do
	echo $file
done
while [ "$n" != "Franta" ]     # nebo: until [ "$n" == "Franta" ]
do
	echo "Jak se jmenujes?"
	read n
	echo $n
done

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.