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

Z Wikiknih
Skočit na navigaci Skočit na vyhledávání
◄ 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]

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áě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]

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 nebo 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]

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]

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]

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]

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]

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]

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 || 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]

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]

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.