Skriptování v Bournově shellu/Příloha C: Rychlý přehled
◄ 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.