Vélemény: miért jó a script?

Vélemény cikk, nem kényszer!

Miért használok parancssoros megoldásokat? Ezt megbeszéltük, és aki úgy gondolja, hogy számára jónak tűnik a parancssor, és használni akarja, annak már csak egy lépés a szkriptek használata. Ma arra térek ki, hogy én miért szeretem a szkripteket és mik is ezek. Itt is, mint az előző részben egy véleményt fogalmazok meg. Amivel lehet egyetérteni, vagy nem. Ha kezdő vagy a Linux témába, akkor mindenképp fuss át cikken, alkoss saját véleményt. Még akkor is megéri, ha most még véletlenül sem gondolsz olyan kockáknak való voodoo varázslatokra, mint a szkriptek. Tudd, hogy van ilyen, és ha majd ha hiányérzeted lesz az eszköztáradban, akkor már tudni fogod ezt a lehetőséget is.

Mi az a szkript?

Rövid, viszonylag egyszerű parancsok egymást követő sora, amit egy egyszerű szövegfájlba helyezünk el, és így futtatjuk. Ez kicsit más megfogalmazás, mint amit a számítógépes guru használnak, de így érthető és tartalmazza azt, ami nekünk fontos.

Miért használok ÉN szkripteket?

Mert így egyszeri munkával, amivel összerakom a szkriptet sokszor felhasználható eszközt kapok. Ha egy feladatra már összeszedtem a parancssori parancsot, akkor azt „lementem” egy szkriptbe és bármikor fel lehet használni. Így egyszeri munkával, és pontosan egy perc ráfordításával sokszor használható „programot” kapok. Ezután már csak a szkript, az új programunk nevét kell begépelni. Ez az időmegtakarítás a parancs bonyolultságától függő, minél bonyolultabb, hosszabb egy parancssori megoldás, annál hatékonyabb ha azt szkriptesítjük.

Az időmegtakarításon, a többszöri felhasználáson kívül az egyik nagy előny, hogy ha kész a szkript, és az működött, akkor már nem kell begépelni a teljes parancssort, és nem fogom egy elütés miatt a hibakereséssel tölteni az időmet.

Ami nekem nagyon fontos volt, amikor úgy döntöttem, hogy nem egy programozási nyelvet tanulok meg, hanem a szkripteket használom, hogy egy szkripthez minimális tanuláson kívül nem kell semmi új ismeret. A már ismert parancsokat, az amúgy is használt megoldásokat kell felhasználni. A szkriptek gyakorlatilag egymás után beírogatott parancsok. Illetve pár nagyon egyszerű, átlátható egyéb szerkezetet használunk, aminek a megtanulása nem okoz gondot. Aki már használt parancssort, annak nem lesz gondja a szkriptekkel. Bár egy komplett programozási nyelv sok esetben jóval több lehetőséget nyújt, de értelmes ember nem várhatja el, hogy mindenki megtanuljon egy-egy ilyen komplexebb programozást!

A szemléletemben a szkript egy lego, van pár jól bevált sablonom, félkész megoldásom, amiből összelegózom a kívánt „programot”.

Én nem értek a programozáshoz!

…és nem is akarom megtanulni! A megszokott ellenérv. Aki már zsigeri gyűlöletet érez a parancssori megoldások iránt, sok esetben emlegeti, hogy bizony neki sem ideje, sem kedve megtanulni ezt. Nem is kell. Gyakorlatilag semmi újat nem kell ismerni, csak azt használni, amit egy kicsit haladóbb Linuxozó már tud. A blogban bemutattam pár alapvető programszerkezetet, amit vagy használsz, vagy nem. A minimális, és a legegyszerűbb szkriptek csak egy vagy két sor pluszt tartalmaznak a megszokott, a parancssorba begépeltekhez képest. Sok feladatot valóban így meg lehet oldani.

Pár alapvető megoldás:

Parancssori operátorok
Shell funkció alapok – egyszerűen
Interaktív script – alapfokon
Loops – hurkok a shell scriptben
if-else és case – alapvető script megoldás egyszerűen

Béna, nehezen lehet egy adatot megadni neki

Sokan azt gondolják, hogy egy parancssori szkript az valóban csak úgy tud valamit kiírni nekünk, vagy bekérni egy adatot, hogy begépeljük a terminálba. Ez igaz is, mert sok esetben egy-egy adatbekérés, kiírás valóban a terminálban történik. De már nem a kőkorszakban vagyunk, meg lehet oldani minimális (valóban minimális) ismerettel, hogy ablakba írja ki azt, amit kell, és ablakot dobjon fel, ha valami adatot kell begépelni.

Minek, mindenre van grafikus program…

Sok feladatra van grafikus felületen program, ez teljesen igaz, és erre még vissza fogok térni. De vannak olyan feladatok, akár egyszerűek, akár bonyolultabbak, amire nincsen kész grafikus program. Vagy, ami sok esetben előfordul, hogy azok messze többet tudnak, mint amire nekem szükségem van. Illetve hiába nagyon jó egy grafikus program, ha a beállítások, paraméterek megadása hosszabb idő a grafikus felületen, mint esetleg a parancssorban, egy kész szkriptet lefuttatni. Kellemes a grafikus programoknál, hogy igyekeznek minden igényt kielégíteni, de ha három paramétert három fülön találsz meg, akkor már időrabló is lehet. De, és ezt kiemelem, ha az adott grafikus program tud sablonokat, beállításokat, profilokat menteni, akkor nem biztos, hogy lassabb a grafikus munka, hiszen a kész sablon, profil az gyorsítja a munkát. Egy példa, mert így lehet, hogy homályos a fejtegetésem. Ha száz képet kell naponta egy adott méretre, és fájltípusra és felbontásra konvertálni és vízjelezni, akkor erre írhatunk egy szkriptet. Nem egyszerű, de csak egyszer kell megtenni. Örökre használható. Ha erre grafikus programot keresünk, és napi szinten kell a fájlokat kijelölni, megadni a méretet, a vízjelet, a kimeneti fájltípust, és a felbontást, és esetleg még a kimeneti fájlok nevét is, az macerás. De nem macerás, ha ezt a beállítást el tudod menteni… Mindig mérlegelni kell, hogy mi a gyorsabb, hatékonyabb megoldás.

Jajjajjajjj, megint!

…. erőlteti a parancssort és a szkriptet! Jajjaj, erőlteti, ájjájájj! Nem, valóban nem akarom erőltetni senkire. Akinek tetszik, az olvassa a következő cikkeket is, akinek meg nem, az nem. Minden cím, amit adok az annyira egyértelmű, hogy abból el tudja dönteni, hogy kell, vagy nem kell ez neki. Nem kell szkriptet használni, én a 3.1-es Windows és a 7-es verzió közt sok éven keresztül nagyon jól elvoltam batch fájlok nélkül, és mindenféle parancssor nélkül. Linuxon is megoldható majdnem minden úgy, hogy nem is tudod, hogy szkriptek is vannak a világon. Illetve az is igaz, hogy egyáltalán nem érdekel, hogy ki mit használ...

Mikor használjunk szkripteket?

  • Csak akkor ha ezzel időt, energiát, munkát takarítunk meg. Nincs nagy értelme szkriptet írni arra, amire van grafikus program, amit gyorsabban használhatunk!
  • Akkor, ha olyan feladatot kell megoldani, ami többször is előfordul, és a kész szkript újra, és újra felhasználható. Vagy legalábbis kis átalakítással többször is használni fogjuk.
  • Ha nincs rá megfelelő kész program. Nincs túl nagy teteje annak, hogy a 101. programnak összeizzadunk, összekínlódunk egy szkriptet, mert mi szkriptet akarunk írni.

Azaz ne magáért a szkriptekért írjunk meg valamit, hanem a feladat megoldására. A célt szolgálja, és ne az egónkat, hogy mi bizony annyira nagy guruk vagyunk, hogy…

Szkript vagy fájlkezelőbe rakott command?

Akinek a második rész idegen, annak érdemes ezt elolvasni. Bár kissé eltérhet egymástól egy-egy fájlkezelő ezen a téren, de kis fantáziával adaptálható mindre a bemutatott módszer.

Én azt követem, hogy ha van rá mód és sokszor használok valamit, akkor mindkét megoldásra elkészítem. Ez az esetek nagy részében nem jelent gondot, hiszen csak a szkriptet illesztem be a fájlkezelőbe. Ha pedig ez nem ennyire egyszerű, akkor átírom azt a pár részt, ami fájlkezelő specifikus. Ilyen lehet az, hogy egy szkriptnél meg kell adni azt a fájlt, amivel dolgozzon, akkora megoldás: szkript.sh fájlneveamiveldolgozzon begépelve a parancssorba, de a fájlkezelőnél megadhatjuk (pld.: %f) azt, hogy a kijelölt fájlon végezze el a műveletet.

Én egy sorrendet követek a szkriptek írásakor. Ha van valami, amit meg kell oldani, és arra nincs ismert programom, akkor rákeresek a google-ben, hogy mely program oldja meg. Az esetek nagy részében van olyan grafikus program, ami teljesen megfelel nekem. Ha nincs, akkor már kiterjesztem a keresés a parancssori megoldásokra, kap egy bash, szkript, command stb. kiegészítést a keresés. Így már majdnem minden esetben találok egy olyan szkriptet, parancsot ami azt, vagy nagyon hasonló feladatot látja el. A legtöbb esetben nem nulláról indulok, hanem a parancsot és a megfelelő kapcsolókat, beállításokat készen kapom. De nagyon sokszor kész szkripteket is találni, hiszen sokan használnak Linuxot, sokan szeretik a szkripteket és előszeretettel osztják meg a jobbnál jobb megoldásokat. Eddig gyakorlatilag nem volt olyan komolyabb problémám, amire valami ötletet, vagy részben megfelelő szkriptet ne találtam volna! Ha találunk olyant, ami nagyjából megfelel, azt egyszerűbb átírni, mint nulláról kezdeni. Legalábbis első időben. Amit fellelünk és hasznosnak találunk mentsük el.

Ok, aki eddig bírta a szövegelésemet, annak már van egy kis indíttatása, hogy ezzel foglalkozzon. Így egy egyszerű példán át megmutatom, hogy mennyire egyszerű egy parancssorba begépelt parancsból, minden tudás nélkül szkriptet csinálni, és így többször felhasználni azt. A legegyszerűbb és nagyon jól ellenőrizhető, de semmi gyakorlati haszonnal nem járó szkripttel kezdünk. Kiíratunk valamit a terminálban, egy szöveget. Ez gyakorlatilag nagyon jó példa, mert nem okozhat semmi gondot a megértése.

echo "szia"

Azaz nyitunk egy terminált és ezt a pár karaktert bepötyögjük, majd enter. Örömmel látjuk, hogy az enter után megjelenik a szia szöveg. Azaz működőképes parancsot készíttetünk. Elindítjuk a nano-t, (vagy egy akármilyen) szövegszerkesztőt. Beírjuk

#!/bin/bash
echo "szia"

Majd mentés és megadjuk a fájl nevét: a.sh és enter. Már mentettük a szkriptet. Kilépünk. Visszakerülünk a terminálba és futtathatóvá tesszük a fájlt. Bár én nagyon ritkán használok nano-t, de érdemes megtanulni az alapvető használatát. Ha nem indul a grafikus felületed, mert beleturkáltál egy config állományba, akkor nehezen tudod grafikus szerkesztővel kijavítani… Jártam így, és nagyon jól jött, hogy a nano-val kijavítottam a hibát. Így nem kellett egy bekonfigurált rendszert újratelepíteni.

chmod +x a.sh

Enter, és nem kell látni semmit. Kapott futtatási jogot. Ha nem adsz neki, és futtatni akarod, akkor elég fura „engedély megtagadva: ./.a.sh” Milyen engedély? Hiszen most hoztam létra, az enyém! Gondolhatnánk, de csak a futtatási engedélyt hiányolja. Majd:

./a.sh

Enter és kiírja, hogy „szia”. A ./ azt mondja meg a rendszernek, hogy az adott könyvtárban, ahol éppen vagy ott keresse a kívánt programot. Ha nem adod meg neki, akkor elkezdi keresni azokban a könyvtárakban, amelyek benne vannak a PATH változóban. Erről itt van szó!

Bár ez így elég soknak tűnik egy „szia” okán, de point így fog ez menni, ha egy bonyolultabb, több tucat paramétert tartalmazó parancssori megoldást szkriptesítünk.

Ez szintén egy vélemény cikk volt!

Kiegészítve, javítva 2023-08-19