Dnesne prikazy

echo parametre Vypise svoje parametre. Necita svoj standardny vstup.
cat subory Vypise obsah suborov na standardny vystup. Bez parametru, cita st. vstup a vypisuje ho na st. vystup.








Shell, Syntax prikazov:

Prikazy sa spracuvaju po riadkoch. Este pred spustenim prikazu sa interpretuju a expanduju vsetky specialne znaky! Spracovanie riadku prebieha nasledovne:

V kazdom riadku sa interpretuju kontrolne znaky a riadok je analyzovany, ci sa jedna o zabudovany prikaz shellu ( budu preberane v kurze c.9 alebo c.10) alebo o vyvolanie externeho prikazu (utility). Ak sa jedna o vyvolanie externeho prikazu, tak sa v riadku interpretuju expanzne znaky shellu a riadok sa rozdeli na slova (parametre). Potom sa vyhlada a spusti vykonatelny subor urceny nultym parametrom riadku a to tak, ze sa vyhlada v adresaroch urcenych premennou PATH. Spustenemu prikazu sa posle prikazovy riadok vo forme parametrov spolu so standardnym prostredim, vcetne standardneho vstupu z klavesnice a standardneho a chyboveho vystupu na obrazovku.




Najdolezitejsie kontrolne znaky interpretovane shellom

Znak Popis Priklad
< presmerovanie standardneho vstupu cat < toto.txt
> presmerovanie standardneho vystupu do suboru cat toto.txt > tutu.txt
>> presmerovanie standardneho vystupu, pridanie do suboru cat toto.txt >> tutu.txt
2>&1 presmeruje chybove spravy tam, kam je nasmerovany standardny vystup gcc ccc > toto 2>&1
   
;oddelovac dvoch prikazov (ak su v jednom riadku). Druhy sa vykona ked skonci prvy.echo toto; echo toto
&&oddelovac prikazov, druhy sa vykona iba ak prvy skonci uspesnetest -f toto && cat toto
||oddelovac prikazov, druhy sa vykona iba ak prvy skonci neuspesnetest -f toto || echo "toto neexistuje"
&oddelovac prikazov, druhy sa spusti nezavisle na prvom (a paralelne s nim), t.j. necaka sa na skoncenie prveho prikazu. Bez zadania druheho prikazu sa pouziva na spustenie prikazu na pozadi.setiathome &
| rura; oddelovac dvoch prikazov, presmeruje standardny vystup prveho prikazu do standardneho vstupu druheho cat toto.txt | wc
   
()spustenie pod-shelu na interpretaciu prikazov(echo toto)




Expanzne znaky shellu

Exp. znaky Popis Priklad Priklad expanzii
{x,y,z} expanzia vsetkych alternativ t{a,e,i,o}to tato teto tito toto
    
~skratka pre domovsky adresar~/home/jozo
${premenna} expanzia na hodnotu premennej ${USER} jozo
` `prikaz medzi opacnymi apostrofmi sa vykona a jeho standardny vystup sa dosadi za povodny text`echo t a b`t a b
    
* expanzia na string, tak aby vysledny argument bol meno suboru t*to tanto tento (ak oba su subory)
? expanzia na znak, tak aby vysledny argument bol meno suboru t?to toto tito (ak oba su subory)
[xyz] expanzia na jeden zo znakov x, y, z, tak aby vysledny argument bol meno suboru toto[12] toto1 toto2 (ak oba su subory)
[^xyz] expanzia na jeden znak, iny ako x, y, z, tak aby vysledny argument bol meno suboru toto[^12] toto3 toto4 (ak oba su subory)
[x-y] expanzia na znak z intervalu x-y, tak aby vysledny argument bol meno suboru toto[0-9] toto1 toto2 (ak oba su subory)
    




Vypinanie specialneho vyznamu znakov (quoting)

Znak Popis Priklad
\znak backslash vypina specialny vyznam jedneho znaku echo \>
'retazec' apostrofy vypinaju specialny vyznam vsetkych znakov v retazci echo 't > & * ~'
"retazec" uvodzovky vypinaju specialny vyznam vsetkych znakov v retazci okrem znakov $ a ` echo "PWD >> ${PWD}"




Poradie vyhodnotenia

Poradie vyhodnocovania tychto znakov je (viacmenej) nasledovne:
  • interpretacia znakov presmerovania vstupu a vystupu (napr: <, >, >>, ...) a interpretacia oddelovacov prikazov (napr: ;, &&, ||, ...)
  • expanzia znaku tilda na zaciatku slov
  • expanzia kuceravych zatvoriek
  • expanzia mien premennych (napr. ${PWD})
  • expanzia prikazov v opacnych apostrofoch (napr `cat toto.txt`)
  • expanzia slov na mena suborov (napr: *, [a-z], ...)












Cvicenia:

1.) Vyrobte vo svojom domovskom adresari subory 'Ahoja' a 'ahoja'.

2.) napiste prikaz, ktory vypise slova 'ahoj00' 'ahoj01' ... az 'ahoj99'.

3.) vyrobte subor 'ahojka', ktory bude obsahovat slova 'ahoj00' 'ahoj01' ... az 'ahoj99'.

4.) Vypiste obsah suboru 'ahojka' na obrazovku.

5.) Prazdne subory sa daju vyrobit aj prikazom
      touch <mena suborov>
    vyrobte vo svojom domovskom adresari subor pre kazdu existujucu
    trojkombinaciu pismen a,b,c a A,B,C, t.j subory:
    aaa aab aac aaA aaB aaC aba ... CCC

6.) Napiste postupne prikazy, ktore vypisu mena vsetkych suborov v domovskom adresari, 
    ktorych meno:

    - zacina a aj konci pismenom 'a'

    - zacina pismenom 'a', a za ktorym je bud 'a' alebo 'b'

    - obsahujuce pismeno 'k'

    - obsahuje (aspon) dve pismena 'a'
 
    - ma tri znaky, z ktorych stredny je 'b'

    - konci koncovkou .h alebo .c
    
7.) Predpokladajme, ze nejaky subor obsahuje mena suborov, ktore treba vyrobit.
    Napiste prikaz, ktory precita taky subor a vyrobi prazdny subor pre kazde meno 
    v nom uvedene. Vyskusajte ho na subore 'ahojka'.

8.) Zistite co (a vysvetlite preco) robia prikazy:
      echo a; echo b
      echo a; echo b > t.txt
      cat t.txt
      echo `cat t.txt`
      ( echo a; echo b ) > t2.txt
      echo a > t3.txt
      echo a | cat > t4.txt
      echo a | echo b
      echo a*?
      cat a*?