Útmutató kezdőknek a BASH-hoz
Üdvözöljük a Beginners Guide to BASH sorozat 2. részében, amely egyedülálló abban, hogy ez az egyetlen BASH oktatóanyag, amelyet kezdő írt kezdőknek.
Az útmutató olvasói gyarapítják tudásukat, és remélhetőleg a végére képesek lesznek megírni néhány meglehetősen okos forgatókönyvet.
Legutóbb foglalkoztunk elkészíti az első szkriptet amely egyszerűen a „Hello World” szavakat jelenítette meg. Olyan témákkal foglalkozik, mint a szövegszerkesztők, a terminálablak megnyitása, a szkriptek elhelyezése, hogyan jelenítheti meg a „Hello World” szavakat és néhány finomabb pontot az escape karaktereken, például az idézőjeleken ("").
Ez a rész a bemeneti paraméterekkel foglalkozik. Vannak egyéb útmutatók akik ilyesmit tanítanak, de túl gyakran beleugranak néhány meglehetősen alacsony szintű dologba, és talán túl sok információt szolgáltatnak.
A paraméterszkript személyre szabást ad
A legutóbbi oktatóprogram „Hello World” forgatókönyvében mindez nagyon statikus volt. A forgatókönyv nem igazán csinált sokat.
Hogyan javíthatnánk a „Hello World” forgatókönyvön?
Mi a helyzet egy szkripttel, amely üdvözli a futtató személyt? A „Hello World” helyett azt fogja mondani, hogy „Hello Gary”, „Hello Tim” vagy „Hello Dolly”.
A bemeneti paraméterek elfogadásának képessége nélkül három szkriptet kellene írnunk: „hellogary.sh”, „hellotim.sh” és „hellodolly.sh”.
Hogyan hozzunk létre egy paramétert
Ha engedélyezzük a szkriptünknek a bemeneti paraméterek olvasását, egyetlen szkriptet használhatunk bárki üdvözlésére.
Ehhez nyisson meg egy terminál ablakot (CTRL + ALT + T), és navigáljon a szkriptek mappájába a következő beírásával: (cd parancsról)
cd szkriptek
Hozzon létre egy új szkriptet greetme.sh néven a következő beírásával: (érintési parancsról)
érintse meg a greetme.sh-t
Nyissa meg a szkriptet kedvenc szerkesztőjében a következő beírásával: (a nano parancsról)
nano greetme.sh
Írja be a következő szöveget a nano-n belül:
#!/bin/bash
echo "hello $@"
nyomja meg CTRL és O a fájl mentéséhez, majd CTRL és x a fájl bezárásához.

A szkript futtatásához írja be a következőt a parancssorba a saját nevével helyettesítve.
sh greetme.sh Tim
Ha a nevemmel futtatom a szkriptet, megjelenik a „Hello Gary” szavak.

Az első sorban a #!/bin/bash sor található, amely a fájl bash szkriptként történő azonosítására szolgál.
A második sor az echo utasítással visszhangozza a hello szót, majd ott van a furcsa $@ jelölés. (visszhang parancsról)
A $@ kibővül, és megjeleníti az összes beírt paramétert a szkriptnévvel együtt. Tehát ha beírta a „sh greetme.sh tim” parancsot, a „hello tim” szavak jelennek meg. Ha beírta, hogy „greetme.sh tim smith”, akkor a „hello tim smith” szavak jelennek meg.
Echo Commands használata
Jó lehet, ha a greetme.sh szkript csak a keresztnévvel köszön. Senki sem mondja azt, hogy "Hello Gary Newell", amikor találkoznak valakivel, de lehet, hogy azt mondják: "Hello Gary".
Változtassuk meg a szkriptet úgy, hogy az csak az első paramétert használja. Nyissa meg a greetme.sh szkriptet nano nyelven a következő beírásával:
nano greetme.sh
Módosítsa a szkriptet úgy, hogy az a következőképpen szóljon:
#!/bin/bash
echo "hello $1"
Mentse el a szkriptet a gomb megnyomásával CTRL és O majd a gomb megnyomásával lépjen ki CTRL és X.

Futtassa a szkriptet az alábbiak szerint (cserélje ki a nevet a sajátjára):
sh greetme.sh gary newell
A forgatókönyv futtatásakor egyszerűen azt fogja mondani, hogy „Hello Gary” (vagy remélhetőleg „hello”, és mi a neve).

A $ szimbólum utáni 1 alapvetően az echo parancsra utal, használja az első paramétert. Ha az 1 dollárt lecseréli egy 2 dollárra, akkor a „hello newell” (vagy mi a vezetékneve) jelenik meg. A teljes név megszerzéséhez hozzáadhat 2 dollárt az 1 dollár után.

Ha egynél több paraméterrel futtatja, akkor azok a beírásuk sorrendjének megfelelő helyeken jelennek meg.

Mellesleg, ha a 2 dollárt 3 dollárra cserélné, és a szkriptet csak 2 paraméterrel futtatná, a kimenet egyszerűen a "Hello" lesz.
A használt paraméterek számának megjelenítése
Lehetőség van a ténylegesen bevitt paraméterek számának megjelenítésére és kezelésére, a későbbi oktatóanyagok pedig megmutatják, hogyan kell használni a paraméterek számát érvényesítési célokra.
A beírt paraméterek számának megjelenítéséhez nyissa meg a greetme.sh szkriptet (nano greetme.sh), és módosítsa a szöveget az alábbiak szerint:
#!/bin/bash
echo "$# nevet adott meg"
echo "hello $@"
nyomja meg CTRL és O a szkript mentéséhez és CTRL és x a nanoból való kilépéshez.

A 2. sorban lévő $# a beírt paraméterek számát mutatja.
Eddig mindez újszerű volt, de nem túl hasznos. Kinek van szüksége olyan szkriptre, amely egyszerűen a „hello”-t jeleníti meg?

Echo Statements vs. Bemeneti paraméterek
Az echo utasítások valódi használata az, hogy bőbeszédű és értelmes kimenetet biztosítsanak a felhasználó számára. Ha el tudja képzelni, hogy valami bonyolult dolgot szeretne csinálni, ami komoly számropogtatással jár és a fájl/mappa manipuláció, hasznos lenne megjeleníteni a felhasználó számára, hogy mi történik az egyes lépésekben út.
Ezzel szemben a bemeneti paraméterek interaktívvá teszik a szkriptet. Bemeneti paraméterek nélkül tucatnyi szkriptre lenne szükség, amelyek mindegyike nagyon hasonló dolgokat csinál, de kissé eltérő néven.
Mindezeket szem előtt tartva, van még néhány hasznos bemeneti paraméter, amelyeket jó ötlet tudni, és ezeket mind egy kódrészletben fogom felvenni.
Nyissa meg a greetme.sh szkriptet, és módosítsa az alábbiak szerint:
#!/bin/bash
echo "Fájlnév: $0"
echo "Folyamatazonosító: $$"
visszhang ""
echo "$# nevet adott meg"
echo "hello $@"
nyomja meg CTRL és O a fájl mentéséhez és CTRL és x kilépni.

Most futtassa a szkriptet (cserélje ki a saját nevével).
sh greetme.sh
Ezúttal a szkript a következőket jeleníti meg:
Fájlnév: greetme.sh
Folyamatazonosító: 18595
2 nevet írtál be
szia gary newell

A szkript első sorában a $0 a futtatott szkript nevét jeleníti meg. Vegye figyelembe, hogy ez nulla dollár és nem o dollár.
A második sorban lévő $$ a futtatott szkript folyamatazonosítóját jeleníti meg. Miért hasznos ez? Ha egy szkriptet futtat az előtérben, akkor egyszerűen a gomb megnyomásával törölheti CTRL és C. Ha a háttérben futtatta a szkriptet, és újra és újra elkezdett hurkolni, és ugyanazt csinálja, vagy kárt okoz a rendszerben, akkor meg kell ölnie.
A háttérben futó szkript leállításához szükség van a szkript folyamatazonosítójára. Nem lenne jó, ha a szkript megadná a folyamatazonosítót a kimenet részeként? (a ps-ről és a kill parancsokról)
Befejezéshez...
Végül, mielőtt befejeznénk ezt a témát, fontos megvitatni, hogy hová kerül a kimenet. Minden alkalommal, amikor a szkript eddig futott, a kimenet megjelenik a képernyőn.
Elég gyakori, hogy a szkript kimenetét kimeneti fájlba írják. Ehhez futtassa a szkriptet a következőképpen:
sh greetme.sh gary > greetme.log
A > szimbólum a fenti parancsban a „hello gary” szöveget adja ki a greetme.log nevű fájlba.
Minden alkalommal, amikor a > szimbólummal futtatja a szkriptet, felülírja a kimeneti fájl tartalmát. Ha inkább hozzá szeretne fűzni a fájlhoz, cserélje ki a > jelet >>-ra.
Most már képesnek kell lennie szöveget írni a képernyőre, és elfogadnia a beviteli paramétereket.