A parancsértelmező
Minden tendencia és látszat ellenére, általános célra még mindig a billentyűzet a leghatékonyabb beviteli eszköz, nem az egér. Míg Windows-ban másodlagos (vagy huszadlagos..) a command prompt, egy Unix vagy Linux elképzelhetetlen a parancssor nélkül. A shell annyira sokat tud, hogy mindenképpen érdemes megismerkedni vele, mert jó kezekben nagyon hatékony eszköz.
A leggyakrabban használt shell a bash/bash2 és a zsh. Képtelenség lenne felsorolni a funkcióikat, erre ott van a többszáz kilobyte-os manual, néhány általános és gyakran használt tulajdonságot azonban illik ismernie minden linuxosnak, mert pár egyszerű aprósággal már nagyon sokmindent lehet kezdeni. Alapértelmezés szerint minden felhasználó bejelentkezésekor a shell indul el. A szabványos kimenete a képernyő, tehát ide írja az üzeneteit, szabványos bemenete pedig a billentyűzet. Egy egyénileg is beállítható promptot jelenít meg, jelezve, hogy készen áll a parancsok fogadására. Ha elindítunk valamit belőle, a shell azt egy gyermekprocesszként szüli meg, és - ha nem küldjük háttérbe - annak a befejeződésére vár. Ha ez megtörtént, a shell újra megjeleníti a promptot.
ls -1 kt*zip | rev | sort | rev
Ebben a sorban a "|" jelek választják el a független parancsokat egymástól, de egyben ezek is kötik össze őket. A | (pipe) funkciója, hogy az előtte álló program szabványos kimenetét (általában a képernyő) átirányítja az utána álló program szabványos bemenetére. Nézzük sorra a parancsokat:
A kimenet és a bemenet nem csak másik programnak adható át, hanem file-ba is irányítható: A "> filenév" a file-ba írást jelent, a "< filenév" pedig a file-ból olvasást. Ennek segítségével bármely kimenet eredményét tárolhatjuk egy file-ban, a >> jellel pedig hozzáfűzhetünk bármit (a > felülírja a file-t, ha már létezik).
Egy shell script egy egyszerű szöveges file, aminek az első sorában illik tartalmaznia, hogy melyik shell futtassa őt. Ennek a szintaxisa például "#!/bin/sh", ekkor a régi és elavult, de minden rendszeren megtalálható sh fogja a scriptet kezelésbe venni. Ettől az egy sortól eltekintve, a shell a #-kal (hashmark) kezdődő sorokat megjegyzésnek tekinti és nem foglalkozik velük.
A shell a változókat nagyon szabadon és rugalmasan kezeli. Változónak tetszőleges sztringet használhatunk, de a könnyebb megkülönböztetés végett ezeket szokás csupa nagybetűvel írni. (A Unix és Linux világában a kis- és nagybetű mindig különbözik.) A shell maga definiál és használ néhány változót, akad köztük pár nagyon hasznos is, például:
A leggyakrabban használt shell a bash/bash2 és a zsh. Képtelenség lenne felsorolni a funkcióikat, erre ott van a többszáz kilobyte-os manual, néhány általános és gyakran használt tulajdonságot azonban illik ismernie minden linuxosnak, mert pár egyszerű aprósággal már nagyon sokmindent lehet kezdeni. Alapértelmezés szerint minden felhasználó bejelentkezésekor a shell indul el. A szabványos kimenete a képernyő, tehát ide írja az üzeneteit, szabványos bemenete pedig a billentyűzet. Egy egyénileg is beállítható promptot jelenít meg, jelezve, hogy készen áll a parancsok fogadására. Ha elindítunk valamit belőle, a shell azt egy gyermekprocesszként szüli meg, és - ha nem küldjük háttérbe - annak a befejeződésére vár. Ha ez megtörtént, a shell újra megjeleníti a promptot.
[oldal:Kimenet-bemenet]
A shell egyik legnagyobb erőssége, hogy több programot tud egymással párhuzamosan elindítani egyetlen parancsból. Ez akkor nyer értelmet, ha az egyes programok kimeneteit és bemeneteit átirányítjuk úgy, hogy a processzek egymással kommunikáljanak. Hogy ez picit érthetőbb legyen, nézzük meg egy példán:Ebben a sorban a "|" jelek választják el a független parancsokat egymástól, de egyben ezek is kötik össze őket. A | (pipe) funkciója, hogy az előtte álló program szabványos kimenetét (általában a képernyő) átirányítja az utána álló program szabványos bemenetére. Nézzük sorra a parancsokat:
- "ls -1 kt*zip": kilistázza a kt-vel kezdődő és zip-re végződő állományok nevét, soronként egyet. A -1 kapcsoló biztosítja ezt, különben alapértelmezés szerint az ls tabulátorokkal elválasztva listáz. Rögtön megfigyelhetjük a csillag szerepét: tetszőleges számú, tetszőleges karaktert helyettesít, de mindenfajta kötöttség nélkül. Az utána írt karaktereket is figyelembe veszi a shell, sőt, akár több *-ot is használhatunk, például su*13*zip. A . (pont) karakternek olyanformán nincs szerepe a filenevekben, mint dos/windows alatt: linuxban "kiterjesztés", mint fogalom, nem létezik. A pont is ugyanolyan karakter egy filenévben, mint bármelyik másik, azt leszámítva, hogy a név elején álló pont hidden file-t jelöl.
- rev: A bemenetére érkező szöveg minden sorát kiadja a kimenetére, a karaktereket fordított sorrendben írva. Például, a "pista"-ból "atsip"-t csinál, minden sort külön megfordítva.
- sort: a bemenetére érkező sorokat abc sorrendbe rendezve kiadja a kimenetén.
A kimenet és a bemenet nem csak másik programnak adható át, hanem file-ba is irányítható: A "> filenév" a file-ba írást jelent, a "< filenév" pedig a file-ból olvasást. Ennek segítségével bármely kimenet eredményét tárolhatjuk egy file-ban, a >> jellel pedig hozzáfűzhetünk bármit (a > felülírja a file-t, ha már létezik).
[oldal:Változók és 'parancs a parancsban']
A shell nem csak egyszerű, beírt parancsok értelmezésére képes, de egy egyszerűsített mini-programnyelv is a rendelkezésünkre áll. Írhatunk egyszerű scripteket, amelyek néha igen bonyolult feladatokat tudnak elvégezni, gyakran olyanokat, ami az embernek kulimunka lenne. Egy gyakori eset, amikor egy könyvtárban levő állományokat kellene szisztematikusan átnevezni, például 20 mp3-nak valami egységes, sorszámozott nevet adni. Ekkor egyetlen félsoros ciklussal megoldhatjuk a problémát.Egy shell script egy egyszerű szöveges file, aminek az első sorában illik tartalmaznia, hogy melyik shell futtassa őt. Ennek a szintaxisa például "#!/bin/sh", ekkor a régi és elavult, de minden rendszeren megtalálható sh fogja a scriptet kezelésbe venni. Ettől az egy sortól eltekintve, a shell a #-kal (hashmark) kezdődő sorokat megjegyzésnek tekinti és nem foglalkozik velük.
A shell a változókat nagyon szabadon és rugalmasan kezeli. Változónak tetszőleges sztringet használhatunk, de a könnyebb megkülönböztetés végett ezeket szokás csupa nagybetűvel írni. (A Unix és Linux világában a kis- és nagybetű mindig különbözik.) A shell maga definiál és használ néhány változót, akad köztük pár nagyon hasznos is, például:
- HOME: a felhasználó home könyvtára
- SHELL: maga a shell típusa (bash, bash2, sh, ksh, zsh, ...)
- PATH: a dos-ban már megszokott elérési út, azonban itt nincs 512 byte-os korlát
- PWD: az aktuális könyvtár, ahol éppen vagyunk
- PPID: a shell szülőjének processz ID-je
- TERM: a terminálemuláció típusa (kompatibilitási okokból)
- PS1: az elsődleges prompt sztring (van még három)
- echo 1234 > szam.txt
Létrehoz egy szam.txt nevű file-t, és beleírja az "1234" karaktersorozatot. - SZAM=`cat szam.txt`
Végrehajtja a cat parancsot, azaz visszaadja a szam.txt tartalmát, és ezt értékül adja a SZAM nevű változónak. - echo $[$SZAM+2]
Aritmetikai kifejezésként értelmezi a szögletes zárójelben foglaltakat, tehát a SZAM értékéhez hozzáad kettőt, és ezt kiírja a szabványos kimenetre. Egy "> szam.txt" sor végére toldásával az értéket visszaírhatjuk a file-ba.