Uživatelské nástroje

Nástroje pro tento web


skripty-a-funkce

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
skripty-a-funkce [2019/01/27 00:11]
Miroslav Bernát
skripty-a-funkce [2019/10/08 00:32] (aktuální)
Miroslav Bernát
Řádek 4: Řádek 4:
 | **true** | vrátí úspěšný (nulový) návratový kód | | **true** | vrátí úspěšný (nulový) návratový kód |
 | **false** | vrátí neúspěšný (nenulový) návratový kód | | **false** | vrátí neúspěšný (nenulový) návratový kód |
-| **test** <​podminka>​ / **[** <​podminka>​ **]** / **[****[** <​podminka>​ **]****]** | vyhodnotí danou podmínku a v závislosti na jejím splnění vrátí úspěšný či neúspěšný návratový kód; k testování existence specifických souborů slouží různé přepínače,​ jejichž ​parametrem ​je název souboru – např. **-e** jakýkoliv soubor, **-f** řádný soubor, **-b** blokové zařízení,​ **-c** znakové zařízení,​ **-d** adresář, **-h** symbolický odkaz, **-s** soubor s nenulovou velikostí, **-r** soubor s právem ke čtení, **-w** soubor s právem k zápisu, **-x** soubor s právem ke spuštění,​ **-u** soubor s SUID bitem, **-g** soubor s SGID bitem, **-k** soubor se sticky bitem, <​soubor1>​ **-nt** <​soubor2>​ soubor1 je novější než soubor2, <​soubor1>​ **-ot** <​soubor2>​ soubor1 je starší než soubor2; k testování číselných hodnot slouží operátory **-eq** je rovno, **-ne** není rovno, **-lt** menší než, **-le** menší nebo rovno, **-gt** větší než, **-ge** větší nebo rovno; k testování řetězců ​ **=** / **==** je rovno, **!=** není rovno, **-z** <​retezec>​ délka řetězce je nulová, **-n** <​retezec>​ délka řetězce je nenulová; pro negaci výrazu slouží **!** <​vyraz>;​ při použití **[****[** **]****]** lze navíc testovat následující výrazy: <​retezec>​ **=** / **==** <​vzor>,​ <​retezec>​ **!=** <​vzor>,​ <​retezec1>​ **<** <​retezec2>​ nebo <​retezec1>​ **>** <​retezec2>​ (řetězec1 podle abecedy předchází nebo následuje řetězec2) a využít **&&​** pro vyhodnocení druhého výrazu pokud první skončil úspěšně,​ **||** pro vyhodnocení druhého výrazu pokud první skončil neúspěšně a **()** pro seskupování výrazů\\ ''​$ test -f *.txt''​ / ''​[ -f *.txt ]''​\\ (příkaz vrátí kód 0, existuje-li právě 1 soubor s příponou „.txt“)\\ ''​$ %%[[ -n $(find . -name "​*.txt"​) ]]%%''​\\ (příkaz vrátí kód 0, existuje-li 1 a více souborů s příponou „.txt“)\\ ''​$ %%[[ abc == *c ]]%%''​\\ ''​$ %%[[ a < z ]]%%''​\\ ''​$ [ $PWD = $HOME ] && echo "​doma"​ || pwd''​\\ ''​$ %%[[ -n $(rpm -qa | egrep "​^sudo"​) && $(stat -c %s /​etc/​sudoers) -gt 0 ]]%% && echo "Sudo se používá."​ || echo "Sudo se nepoužívá."''​\\ ''#​ duid=$(awk -F ":"​ '​{print $3}' /etc/passwd | sort | uniq -d); %%[[ -z "​$duid"​ ]]%% && echo "​NONE"​ || echo "​$duid"''​\\ (vypíše duplicitní UID v systému)\\ ''#​ pp=$(awk -F ":"​ '{if (length($2) > 2) print $1}' /​etc/​passwd);​ %%[[ -z "​$pp"​ ]]%% && echo "​NONE"​ || echo "​$pp"​ | tr " " "​\n"''​\\ (vypíše uživatele, jejichž hesla se nachází v ///​etc/​passwd//​) |+| **test** <​podminka>​ / **[** <​podminka>​ **]** / **[****[** <​podminka>​ **]****]** | vyhodnotí danou podmínku a v závislosti na jejím splnění vrátí úspěšný či neúspěšný návratový kód; k testování existence specifických souborů slouží různé přepínače,​ jejichž ​argumentem ​je název souboru – např. **-e** jakýkoliv soubor, **-f** řádný soubor, **-b** blokové zařízení,​ **-c** znakové zařízení,​ **-d** adresář, **-h** symbolický odkaz, **-s** soubor s nenulovou velikostí, **-r** soubor s právem ke čtení, **-w** soubor s právem k zápisu, **-x** soubor s právem ke spuštění,​ **-u** soubor s SUID bitem, **-g** soubor s SGID bitem, **-k** soubor se sticky bitem, <​soubor1>​ **-nt** <​soubor2>​ soubor1 je novější než soubor2, <​soubor1>​ **-ot** <​soubor2>​ soubor1 je starší než soubor2; k testování číselných hodnot slouží operátory **-eq** je rovno, **-ne** není rovno, **-lt** menší než, **-le** menší nebo rovno, **-gt** větší než, **-ge** větší nebo rovno; k testování řetězců ​ **=** / **==** je rovno, **!=** není rovno, **-z** <​retezec>​ délka řetězce je nulová, **-n** <​retezec>​ délka řetězce je nenulová; pro negaci výrazu slouží **!** <​vyraz>;​ při použití **[****[** **]****]** lze navíc testovat následující výrazy: <​retezec>​ **=** / **==** <​vzor>,​ <​retezec>​ **!=** <​vzor>,​ <​retezec1>​ **<** <​retezec2>​ nebo <​retezec1>​ **>** <​retezec2>​ (řetězec1 podle abecedy předchází nebo následuje řetězec2) a využít **&&​** pro vyhodnocení druhého výrazu pokud první skončil úspěšně,​ **||** pro vyhodnocení druhého výrazu pokud první skončil neúspěšně a **()** pro seskupování výrazů\\ ''​$ test -f *.txt''​ / ''​[ -f *.txt ]''​\\ (příkaz vrátí kód 0, existuje-li právě 1 soubor s příponou „.txt“)\\ ''​$ %%[[ -n $(find . -name "​*.txt"​) ]]%%''​\\ (příkaz vrátí kód 0, existuje-li 1 a více souborů s příponou „.txt“)\\ ''​$ %%[[ abc == *c ]]%%''​\\ ''​$ %%[[ a < z ]]%%''​\\ ''​$ [ $PWD = $HOME ] && echo "​doma"​ || pwd''​\\ ''​$ %%[[ -n $(rpm -qa | egrep "​^sudo"​) && $(stat -c %s /​etc/​sudoers) -gt 0 ]]%% && echo "Sudo se používá."​ || echo "Sudo se nepoužívá."''​\\ ''#​ duid=$(awk -F ":"​ '​{print $3}' /etc/passwd | sort | uniq -d); %%[[ -z "​$duid"​ ]]%% && echo "​NONE"​ || echo "​$duid"''​\\ (vypíše duplicitní UID v systému)\\ ''#​ pp=$(awk -F ":"​ '{if (length($2) > 2) print $1}' /​etc/​passwd);​ %%[[ -z "​$pp"​ ]]%% && echo "​NONE"​ || echo "​$pp"​ | tr " " "​\n"''​\\ (vypíše uživatele, jejichž hesla se nachází v ///​etc/​passwd//​) |
 | **if** <​podminka=pravda>​**;​** **then** <​akce>​**;​** (**elif** <​podminka2=pravda>​**;​ then** <​akce2>​**;​**) (**else** <​akce3>​)**;​ fi** | **if** uvádí podmínku, je-li pravdou, pak **then** specifikuje požadovanou akci, jinak **else** určí akci alternativní,​ další podmínky lze stanovit výrazem **elif**, seznam podmínek ukončuje **fi**\\ ''​$ if test -f *.txt / [ -f *.txt ]; then echo "​soubor existuje";​ fi''​\\ ''​$ if [ "​$(whoami)"​ != '​root'​ ]; then exit; else echo "​hello";​ fi''​\\ ​ ''​$ if [ $? -ne 0 ]; then echo $?; fi''​\\ (příkaz vrátí kód 0, skončil-li předchozí příkaz neúspěšně)\\ ''#​ np=$(awk -F ":"​ '{if (length($2) > 2 && $2 !~ /​^(!!)?​(\$[1256]\$)/​) print $1}' /​etc/​shadow);​ if %%[[ -z "​$np"​ ]]%%; then echo "​Všechna hesla jsou šifrovaná.";​ else { echo "Heslo je pravděpodobně nešifrované nebo nesprávné pro uživatele:";​ echo "​$np"​ | tr " " "​\n";​};​ fi''​\\ (vypíše uživatele s nešifrovanými či nesprávnými hesly) | | **if** <​podminka=pravda>​**;​** **then** <​akce>​**;​** (**elif** <​podminka2=pravda>​**;​ then** <​akce2>​**;​**) (**else** <​akce3>​)**;​ fi** | **if** uvádí podmínku, je-li pravdou, pak **then** specifikuje požadovanou akci, jinak **else** určí akci alternativní,​ další podmínky lze stanovit výrazem **elif**, seznam podmínek ukončuje **fi**\\ ''​$ if test -f *.txt / [ -f *.txt ]; then echo "​soubor existuje";​ fi''​\\ ''​$ if [ "​$(whoami)"​ != '​root'​ ]; then exit; else echo "​hello";​ fi''​\\ ​ ''​$ if [ $? -ne 0 ]; then echo $?; fi''​\\ (příkaz vrátí kód 0, skončil-li předchozí příkaz neúspěšně)\\ ''#​ np=$(awk -F ":"​ '{if (length($2) > 2 && $2 !~ /​^(!!)?​(\$[1256]\$)/​) print $1}' /​etc/​shadow);​ if %%[[ -z "​$np"​ ]]%%; then echo "​Všechna hesla jsou šifrovaná.";​ else { echo "Heslo je pravděpodobně nešifrované nebo nesprávné pro uživatele:";​ echo "​$np"​ | tr " " "​\n";​};​ fi''​\\ (vypíše uživatele s nešifrovanými či nesprávnými hesly) |
 | **case** <​retezec>​ **in** <​vzorek>​(%%|%%<​vzorek>​**)** <​seznam>​**;;​ esac** | vykoná příkaz na základě shody řetězce se vzorkem; řetězec ztotožňuje libovolnou proměnnou, vzorek „*“ uvádí akci, pokud shoda nenastane (obdoba příkazu „else“),​ seznam vzorků ukončuje „)“ a skupina příkazů se zakončí „;;“\\ ''#​!/​bin/​bash''​\\ ''#​ Skript podle akce vytvoří či smaže daný soubor.''​\\ ''​echo -n 'Zadej akci a soubor: '''​\\ ''​read AKCE SOUBOR''​\\ ''​case $AKCE in''​\\ <​tab>''​smaz|remove|delete) rm $SOUBOR;;''​\\ <​tab>''​vytvor|create) <​tab>​touch $SOUBOR''​\\ <​tab><​tab><​tab><​tab><​tab><​tab><​tab><​tab><​tab>''​chmod 777 $SOUBOR;;''​\\ <​tab>''​*) <tab> <tab> <​tab>​echo '​Neznama operace';;''​\\ ''​esac''​ | | **case** <​retezec>​ **in** <​vzorek>​(%%|%%<​vzorek>​**)** <​seznam>​**;;​ esac** | vykoná příkaz na základě shody řetězce se vzorkem; řetězec ztotožňuje libovolnou proměnnou, vzorek „*“ uvádí akci, pokud shoda nenastane (obdoba příkazu „else“),​ seznam vzorků ukončuje „)“ a skupina příkazů se zakončí „;;“\\ ''#​!/​bin/​bash''​\\ ''#​ Skript podle akce vytvoří či smaže daný soubor.''​\\ ''​echo -n 'Zadej akci a soubor: '''​\\ ''​read AKCE SOUBOR''​\\ ''​case $AKCE in''​\\ <​tab>''​smaz|remove|delete) rm $SOUBOR;;''​\\ <​tab>''​vytvor|create) <​tab>​touch $SOUBOR''​\\ <​tab><​tab><​tab><​tab><​tab><​tab><​tab><​tab><​tab>''​chmod 777 $SOUBOR;;''​\\ <​tab>''​*) <tab> <tab> <​tab>​echo '​Neznama operace';;''​\\ ''​esac''​ |
Řádek 10: Řádek 10:
 | **while** <​seznam1>​**;​ do** <​seznam2>​**;​ done** | spouští opakovaně „seznam2“,​ dokud „seznam1“ vrací úspěšný návratový kód\\ ''#​!/​bin/​bash''​\\ ''#​ Skript otvírá čtyři terminálová okna.''​\\ ''​I=0''​\\ ''​while [ $i -lt 4 ]; do xterm &''​\\ <​tab>''​i=$[$i+1];​ done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript vytváří soubor v intervalu pěti minut.''​\\ ''​while true; do''​\\ <​tab>''​touch pic-`date|awk '​{print $2,​$3,​$4,​$6}'​|sed 's/ /​_/​g'​`.jpg''​\\ <​tab>''​sleep 300; done''​ | | **while** <​seznam1>​**;​ do** <​seznam2>​**;​ done** | spouští opakovaně „seznam2“,​ dokud „seznam1“ vrací úspěšný návratový kód\\ ''#​!/​bin/​bash''​\\ ''#​ Skript otvírá čtyři terminálová okna.''​\\ ''​I=0''​\\ ''​while [ $i -lt 4 ]; do xterm &''​\\ <​tab>''​i=$[$i+1];​ done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript vytváří soubor v intervalu pěti minut.''​\\ ''​while true; do''​\\ <​tab>''​touch pic-`date|awk '​{print $2,​$3,​$4,​$6}'​|sed 's/ /​_/​g'​`.jpg''​\\ <​tab>''​sleep 300; done''​ |
 | **until** <​seznam1>​**;​ do** <​seznam2>​**;​ done** | spouští opakovaně „seznam2“,​ dokud „seznam1“ vrací neúspěšný návratový kód\\ ''#​!/​bin/​bash''​\\ ''#​ Skript vypíše čísla od 0 do 99.''​\\ ''​a=-1''​\\ ''​until [ $a -eq 99 ]; do''​\\ <​tab>''​a=$(expr $a + 1)''​\\ <​tab>''​echo $a; done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript kopíruje soubory z domovského do webového adresáře, kde každou hodinu vytvoří nový\\ # adresář, přičemž v případě jeho zaplnění na více než 90 % smaže adresáře starší 30 dní.''​\\ ''​while true; do''​\\ <​tab>''​DISKFUL=$(df -h $WEBDIR | grep -v File | \''​ \\ <​tab>''​awk '​{print $5 }' | cut -d "​%"​ -f1 -)''​\\ \\ <​tab>''​until [ $DISKFUL -ge "​90"​ ]; do''​\\ ​ <​tab><​tab>''​WEBDIR=/​var/​www/​webcam''​\\ <​tab><​tab>''​DATE=`date +%Y%m%d`''​\\ <​tab><​tab>''​HOUR=`date +%H`''​\\ <​tab><​tab>''​mkdir $WEBDIR/"​$DATE"''​\\ \\ <​tab><​tab><​tab>''​while [ $HOUR -ne "​00"​ ]; do''​\\ <​tab><​tab><​tab>''​PICDIR=/​home/​user/​pics''​\\ <​tab><​tab><​tab>''​DESTDIR=$WEBDIR/"​$DATE"/"​$HOUR"''​\\ <​tab><​tab><​tab>''​mkdir "​$DESTDIR"''​\\ <​tab><​tab><​tab>''​cp $PICDIR/​*.jpg "​$DESTDIR"/''​\\ <​tab><​tab><​tab>''​sleep 3600''​\\ <​tab><​tab><​tab>''​HOUR=`date +%H`; done''​\\ \\ <​tab>''​DISKFULL=$(df -h $WEBDIR | grep -v File | \''​\\ <​tab>''​awk '{ print $5 }' | cut -d "​%"​ -f1 -)''​\\ <​tab>''​done''​\\ \\ ''​TOREMOVE=$(find $WEBDIR -type d -mtime +30)''​\\ <​tab>''​for i in $TOREMOVE; do''​\\ <​tab>''​rm -rf "​$i";​ done''​\\ ''​done''​ | | **until** <​seznam1>​**;​ do** <​seznam2>​**;​ done** | spouští opakovaně „seznam2“,​ dokud „seznam1“ vrací neúspěšný návratový kód\\ ''#​!/​bin/​bash''​\\ ''#​ Skript vypíše čísla od 0 do 99.''​\\ ''​a=-1''​\\ ''​until [ $a -eq 99 ]; do''​\\ <​tab>''​a=$(expr $a + 1)''​\\ <​tab>''​echo $a; done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript kopíruje soubory z domovského do webového adresáře, kde každou hodinu vytvoří nový\\ # adresář, přičemž v případě jeho zaplnění na více než 90 % smaže adresáře starší 30 dní.''​\\ ''​while true; do''​\\ <​tab>''​DISKFUL=$(df -h $WEBDIR | grep -v File | \''​ \\ <​tab>''​awk '​{print $5 }' | cut -d "​%"​ -f1 -)''​\\ \\ <​tab>''​until [ $DISKFUL -ge "​90"​ ]; do''​\\ ​ <​tab><​tab>''​WEBDIR=/​var/​www/​webcam''​\\ <​tab><​tab>''​DATE=`date +%Y%m%d`''​\\ <​tab><​tab>''​HOUR=`date +%H`''​\\ <​tab><​tab>''​mkdir $WEBDIR/"​$DATE"''​\\ \\ <​tab><​tab><​tab>''​while [ $HOUR -ne "​00"​ ]; do''​\\ <​tab><​tab><​tab>''​PICDIR=/​home/​user/​pics''​\\ <​tab><​tab><​tab>''​DESTDIR=$WEBDIR/"​$DATE"/"​$HOUR"''​\\ <​tab><​tab><​tab>''​mkdir "​$DESTDIR"''​\\ <​tab><​tab><​tab>''​cp $PICDIR/​*.jpg "​$DESTDIR"/''​\\ <​tab><​tab><​tab>''​sleep 3600''​\\ <​tab><​tab><​tab>''​HOUR=`date +%H`; done''​\\ \\ <​tab>''​DISKFULL=$(df -h $WEBDIR | grep -v File | \''​\\ <​tab>''​awk '{ print $5 }' | cut -d "​%"​ -f1 -)''​\\ <​tab>''​done''​\\ \\ ''​TOREMOVE=$(find $WEBDIR -type d -mtime +30)''​\\ <​tab>''​for i in $TOREMOVE; do''​\\ <​tab>''​rm -rf "​$i";​ done''​\\ ''​done''​ |
-| **for** <​promenna> ​(**in** <​retezec>​)**;** **do** <​seznam>​**;​ done** | přiřadí proměnné postupně hodnotu všech parametrů skriptu či daného řetězce a vykoná seznam příkazů\\ ''#​!/​bin/​bash''​\\ ''#​ Skript vytvoří uživatele uvedené v souboru ​"users" ​v pracovním adresáři,​\\ # přidá je do skupiny ​"admins" ​a nastaví heslo "password".''​\\ ''​for user in $(cat users); do''​\\ <​tab>''​useradd -g admins $user''​\\ <​tab>''​echo password | passwd --stdin $user''​\\ ''​done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript vypíše obsah pracovního adresáře.''​\\ ''​for x in $(ls -F)''​\\ ''​do''​\\ <​tab>''​echo "V adresari `pwd` se nachazi soubor/​adresar:​ $x"''​\\ ''​done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript spočítá počet položek v pracovním adresáři.''​\\ ''​POC=0''​\\ ''​for nazev in *''​\\ <​tab>''​do''​\\ <​tab><​tab>''​POC=$%%(($POC+1))%%''​\\ <​tab>''​done''​\\ ''​echo "V adresari `pwd` je $POC polozek."''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript změní formát všech souborů .tif na .jpg.''​\\ ''​for pic in *.tif; do''​\\ <​tab>''​convert "​$pic"​ "​$(echo "​$pic"​ | sed '​s/​\.tif/​.jpg/'​)"''​\\ ''​done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript zjistí, který z uvedených procesů běží, vypíše jeho jméno včetně počtu řádků,\\ # které zabírá a nakonec zobrazí výpis všech procesů a celkový počet řádků.''​\\ ''​services="​http pmon lsnr sap"''​\\ ''​for service in $services''​\\ <​tab>''​do running_processes="​$(ps -ef | grep $service | grep -v grep)"''​\\ <​tab><​tab>''​if [ -n "​$running_processes"​ ]''​\\ <​tab><​tab><​tab>''​then echo''​\\ <​tab><​tab><​tab>''​echo $service:''​\\ <​tab><​tab><​tab>''​echo''​\\ <​tab><​tab><​tab>''​echo "​$running_processes"''​\\ <​tab><​tab><​tab>''​echo''​\\ <​tab><​tab><​tab>''​echo "​lines:​ $(echo "​$running_processes"​ | wc -l)"''​\\ <​tab><​tab><​tab>''​echo''​\\ <​tab><​tab><​tab>''​echo "​=========="''​\\ <​tab><​tab>''​fi''​\\ <​tab>''​done''​\\ ''​echo''​\\ ''​echo "​summary:"''​\\ ''​echo''​\\ ''​ps -ef''​\\ ''​echo''​\\ ''​echo "​lines:​ $(ps -ef | wc -l)"''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript se připojí ke všem serverům, jejichž IP adresy jsou uvedeny v souboru ​"servers",\\ # na nich spustí příkaz ​"hostname" ​"uname -a" ​a výsledek pak zobrazí na STDOUT.\\ # Podmínkou takového připojení jsou funkční autentizační rsa/dsa klíče pro ssh.''​\\ ''​for a in $(cat servers); do''​\\ ''​ssh $a '​hostname;​ uname -a'; done''​ |+| **for** <​promenna>​ **in** <​retezec>​**;​** **do** <​seznam>​**;​ done** | přiřadí proměnné postupně hodnotu všech parametrů skriptu či daného řetězce a vykoná seznam příkazů\\ ''#​!/​bin/​bash''​\\ ''#​ Skript vytvoří uživatele uvedené v souboru ​users“ v pracovním adresáři,​\\ # přidá je do skupiny ​admins“ a nastaví heslo password.''​\\ ''​for user in $(cat users); do''​\\ <​tab>''​useradd -g admins $user''​\\ <​tab>''​echo password | passwd --stdin $user''​\\ ''​done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript vypíše obsah pracovního adresáře.''​\\ ''​for x in $(ls -F)''​\\ ''​do''​\\ <​tab>''​echo "V adresari `pwd` se nachazi soubor/​adresar:​ $x"''​\\ ''​done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript spočítá počet položek v pracovním adresáři.''​\\ ''​POC=0''​\\ ''​for nazev in *''​\\ <​tab>''​do''​\\ <​tab><​tab>''​POC=$%%(($POC+1))%%''​\\ <​tab>''​done''​\\ ''​echo "V adresari `pwd` je $POC polozek."''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript změní formát všech souborů .tif na .jpg.''​\\ ''​for pic in *.tif; do''​\\ <​tab>''​convert "​$pic"​ "​$(echo "​$pic"​ | sed '​s/​\.tif/​.jpg/'​)"''​\\ ''​done''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript zjistí, který z uvedených procesů běží, vypíše jeho jméno včetně počtu řádků,\\ # které zabírá a nakonec zobrazí výpis všech procesů a celkový počet řádků.''​\\ ''​services="​http pmon lsnr sap"''​\\ ''​for service in $services''​\\ <​tab>''​do running_processes="​$(ps -ef | grep $service | grep -v grep)"''​\\ <​tab><​tab>''​if [ -n "​$running_processes"​ ]''​\\ <​tab><​tab><​tab>''​then echo''​\\ <​tab><​tab><​tab>''​echo $service:''​\\ <​tab><​tab><​tab>''​echo''​\\ <​tab><​tab><​tab>''​echo "​$running_processes"''​\\ <​tab><​tab><​tab>''​echo''​\\ <​tab><​tab><​tab>''​echo "​lines:​ $(echo "​$running_processes"​ | wc -l)"''​\\ <​tab><​tab><​tab>''​echo''​\\ <​tab><​tab><​tab>''​echo "​=========="''​\\ <​tab><​tab>''​fi''​\\ <​tab>''​done''​\\ ''​echo''​\\ ''​echo "​summary:"''​\\ ''​echo''​\\ ''​ps -ef''​\\ ''​echo''​\\ ''​echo "​lines:​ $(ps -ef | wc -l)"''​\\ \\ ''#​!/​bin/​bash''​\\ ''#​ Skript se připojí ke všem serverům, jejichž IP adresy jsou uvedeny v souboru ​servers,\\ # na nich spustí příkaz ​hostname“ uname -a“ a výsledek pak zobrazí na STDOUT.\\ # Podmínkou takového připojení jsou funkční autentizační rsa/dsa klíče pro ssh.''​\\ ''​for a in $(cat servers); do''​\\ ''​ssh $a '​hostname;​ uname -a'; done''​ |
 | **break** (<n>) | ukončí daný cyklus, //n// určí počet cyklů\\ ''#​!/​bin/​bash''​\\ ''#​ Skript se ukončí, pokud hodnota proměnné se rovná 3.''​\\ ''​for myloop in 1 2 3 4 5; do''​\\ <​tab>''​echo "​$myloop"''​\\ <​tab>''​if [ "​$myloop"​ -eq 3 ]; then''​\\ <​tab>''​break # This line will break out of the loop; fi''​\\ ''​done''​ | | **break** (<n>) | ukončí daný cyklus, //n// určí počet cyklů\\ ''#​!/​bin/​bash''​\\ ''#​ Skript se ukončí, pokud hodnota proměnné se rovná 3.''​\\ ''​for myloop in 1 2 3 4 5; do''​\\ <​tab>''​echo "​$myloop"''​\\ <​tab>''​if [ "​$myloop"​ -eq 3 ]; then''​\\ <​tab>''​break # This line will break out of the loop; fi''​\\ ''​done''​ |
 | **continue** (<n>) | opakuje další cyklus, //n// určí počet cyklů\\ ''#​!/​bin/​bash''​\\ ''#​ Skript povolí v názvech souborů jen malá písmena.''​\\ ''​LIST="​$(ls)"''​\\ ''​for name in "​$LIST";​ do''​\\ <​tab>''​if %%[[ "​$name"​ != *[[:​upper:​]]* ]]%%; then''​\\ <​tab>''​continue;​ fi''​\\ \\ ''​ORIG="​$name"''​\\ ''​NEW=$(echo $name | tr '​A-Z'​ '​a-z'​)''​\\ ''​mv "​$ORIG"​ "​$NEW"''​\\ ''​echo "new name for $ORIG is $NEW"''​\\ ''​done''​ | | **continue** (<n>) | opakuje další cyklus, //n// určí počet cyklů\\ ''#​!/​bin/​bash''​\\ ''#​ Skript povolí v názvech souborů jen malá písmena.''​\\ ''​LIST="​$(ls)"''​\\ ''​for name in "​$LIST";​ do''​\\ <​tab>''​if %%[[ "​$name"​ != *[[:​upper:​]]* ]]%%; then''​\\ <​tab>''​continue;​ fi''​\\ \\ ''​ORIG="​$name"''​\\ ''​NEW=$(echo $name | tr '​A-Z'​ '​a-z'​)''​\\ ''​mv "​$ORIG"​ "​$NEW"''​\\ ''​echo "new name for $ORIG is $NEW"''​\\ ''​done''​ |
-| **exit** (<n>) | ukončí skript daným návratovým kódem, není-li uveden, ​bere se v úvahu ​návratový kód posledního příkazu uvnitř skriptu |+| **exit** (<n>) | ukončí skript ​daným návratovým kódem, není-li uveden, ​návratovým kódem skriptu je návratový kód posledního příkazu ​spuštěného ​uvnitř skriptu |
 \\ \\
 ^ FUNKCE ^ ^ ^ FUNKCE ^ ^
 | **function** <​jmeno_funkce>​ **{** <​seznam>​**;​}** / <​jmeno_funkce>​ **()** **{** <​seznam>​**;​}** | definuje funkci, jejíž obsah je uzavřen do složených závorek; funkce se provádí v běžném shellu a využívá se zejména v případech,​ kdy je třeba provést danou operaci (posloupnost příkazů) opakovaně, spustí se zadáním jejího názvu a standardně vrací návratový kód posledního provedeného příkazu, není-li stanoveno jinak příkazem „return“;​ uvnitř funkce lze příkazem „local“ definovat lokální proměnnou (ta se dědí i do vnořených funkcí), pokud existuje globální proměnná stejného názvu, je ve funkci potlačena; funkci lze používat trvale (i po dalším spuštění shellu) jejím uvedením v //​.bashrc//;​ informace o předaných argumentech skriptům či funkcím jsou uloženy ve zvláštních proměnných („$#“ celkový počet argumentů, „$<​n>​“ daný argument v pořadí v rozmezí 1–9, „${<​n>​}“ libovolný argument v pořadí, „$*“ všechny argumenty)\\ ''#​ Funkce „test“ vytvoří soubor, který je zadán jako argument a nastaví mu daná přístupová\\ # práva. Pokud soubor stejného jména již existuje nebo zadaný název obsahuje pouze mezeru\\ # či zcela chybí, vypíše se chybová hláška.''​\\ ''​$ function test''​\\ ''>​ {''​\\ ''>​ if ! [ -e $* || $* = ('​)('​) ]; then''​\\ ''>''<​tab>''​touch $*; chmod 755 $*''​\\ ''>​ else''​\\ ''>''<​tab>''​echo "​Error"''​\\ ''>​ fi''​\\ ''>​ echo "​Počet argumentů: $#"''​\\ ''>​ echo "​Všechny argumenty: $*"''​\\ ''>​ echo "​Pátý argument: $5"''​\\ ''>​ }''​\\ \\ ''#​ Funkce „user“ zjistí, zda uživatel, který je zadán jako argument, existuje v systému,\\ # a pokud ano, vypíše o něm podrobné informace.''​\\ ''​$ user ()''​\\ ''>​ {''​\\ ''>​ if [ $(grep -ic ''''​^$1''​ ''/​etc/​passwd) -eq 0 ]; then''​\\ ''>''<​tab>''​echo "​Uzivatel $1 neexistuje."''​\\ ''>​ else''​\\ ''>''<​tab>''​echo "​Uzivatel $1 existuje."​ && finger $1''​\\ ''>​ fi''​\\ ''>​ }''​\\ \\ ''#​ Funkce „poc“ vypočítá procentuální hodnotu druhého číselného argumentu z prvního,\\ # přičemž první argument představuje hodnotu 100 %.''​\\ ''​$ poc () {''​\\ ''>​ local x=$1 y=$2''​\\ ''>​ echo "$x = 100%, $y = x%"''​\\ ''>​ echo "$y = $[$%%(( 100 * $y ))%% / $x]% z $x"''​\\ ''>​ }''​ | | **function** <​jmeno_funkce>​ **{** <​seznam>​**;​}** / <​jmeno_funkce>​ **()** **{** <​seznam>​**;​}** | definuje funkci, jejíž obsah je uzavřen do složených závorek; funkce se provádí v běžném shellu a využívá se zejména v případech,​ kdy je třeba provést danou operaci (posloupnost příkazů) opakovaně, spustí se zadáním jejího názvu a standardně vrací návratový kód posledního provedeného příkazu, není-li stanoveno jinak příkazem „return“;​ uvnitř funkce lze příkazem „local“ definovat lokální proměnnou (ta se dědí i do vnořených funkcí), pokud existuje globální proměnná stejného názvu, je ve funkci potlačena; funkci lze používat trvale (i po dalším spuštění shellu) jejím uvedením v //​.bashrc//;​ informace o předaných argumentech skriptům či funkcím jsou uloženy ve zvláštních proměnných („$#“ celkový počet argumentů, „$<​n>​“ daný argument v pořadí v rozmezí 1–9, „${<​n>​}“ libovolný argument v pořadí, „$*“ všechny argumenty)\\ ''#​ Funkce „test“ vytvoří soubor, který je zadán jako argument a nastaví mu daná přístupová\\ # práva. Pokud soubor stejného jména již existuje nebo zadaný název obsahuje pouze mezeru\\ # či zcela chybí, vypíše se chybová hláška.''​\\ ''​$ function test''​\\ ''>​ {''​\\ ''>​ if ! [ -e $* || $* = ('​)('​) ]; then''​\\ ''>''<​tab>''​touch $*; chmod 755 $*''​\\ ''>​ else''​\\ ''>''<​tab>''​echo "​Error"''​\\ ''>​ fi''​\\ ''>​ echo "​Počet argumentů: $#"''​\\ ''>​ echo "​Všechny argumenty: $*"''​\\ ''>​ echo "​Pátý argument: $5"''​\\ ''>​ }''​\\ \\ ''#​ Funkce „user“ zjistí, zda uživatel, který je zadán jako argument, existuje v systému,\\ # a pokud ano, vypíše o něm podrobné informace.''​\\ ''​$ user ()''​\\ ''>​ {''​\\ ''>​ if [ $(grep -ic ''''​^$1''​ ''/​etc/​passwd) -eq 0 ]; then''​\\ ''>''<​tab>''​echo "​Uzivatel $1 neexistuje."''​\\ ''>​ else''​\\ ''>''<​tab>''​echo "​Uzivatel $1 existuje."​ && finger $1''​\\ ''>​ fi''​\\ ''>​ }''​\\ \\ ''#​ Funkce „poc“ vypočítá procentuální hodnotu druhého číselného argumentu z prvního,\\ # přičemž první argument představuje hodnotu 100 %.''​\\ ''​$ poc () {''​\\ ''>​ local x=$1 y=$2''​\\ ''>​ echo "$x = 100%, $y = x%"''​\\ ''>​ echo "$y = $[$%%(( 100 * $y ))%% / $x]% z $x"''​\\ ''>​ }''​ |
-| **return** (<n>) | ukončí funkci daným návratovým kódem, není-li uveden, ​bere se v úvahu ​návratový kód posledního ​provedeného ​příkazu uvnitř funkce |+| **return** (<n>) | ukončí funkci ​daným návratovým kódem, není-li uveden, ​návratovým kódem funkce je návratový kód posledního příkazu ​spuštěného ​uvnitř funkce |
Poslední úprava: 2019/01/27 00:11 autor: Miroslav Bernát

počet návštěv: