A kezdők kézikönyve a héj szkriptek készítéséhez: az alapok

A „shell scripting” kifejezést gyakran emlegetik a Linux fórumain, de sok felhasználó nem ismeri. Ennek az egyszerű és hatékony programozási módszernek a megtanulása időt takaríthat meg, jobban megismerheti a parancssort, és száműzheti az unalmas fájlkezelési feladatokat.

Mi a Shell Scripting?

Linux-felhasználónak lenni azt jelenti, hogy a parancssorral játszik. Tetszik vagy sem, csak néhány dolog sokkal könnyebben elvégezhető ezen a felületen keresztül, mint a mutató és a kattintás. Minél többet használja és tanulja meg a parancssort, annál jobban látja annak lehetőségeit. Nos, maga a parancssor egy program: a shell. A legtöbb Linux-disztribúció ma a Bash-t használja, és ez az, amire valóban beírja a parancsokat.

Néhányan, akik a Windows használata előtt a Windows rendszert használták, emlékezhetnek a kötegelt fájlokra. Ezek kis szövegfájlok voltak, amelyeket végrehajtásukhoz parancsokkal tölthettek be, és a Windows sorban futtatta őket. Ügyes és ügyes módszer volt néhány dolog elvégzésére, például játékok futtatására a középiskolai számítógépes laboratóriumban, amikor nem tudta megnyitni a rendszermappákat vagy létrehozni a parancsikonokat. Bár a Windows kötegelt fájljai hasznosak, a shell szkriptek olcsó utánzatai.

A Shell szkriptek lehetővé teszik számunkra, hogy a parancsokat láncokban programozzuk, és a rendszer parancsfájlos eseményként hajtsa végre őket, akárcsak a kötegelt fájlokat. Sokkal hasznosabb funkciókat is lehetővé tesznek, például a parancsok helyettesítését. Meghívhat egy parancsot, például a dátumot, és használhatja annak kimenetét egy fájlnév-séma részeként. Automatizálhatja a biztonsági másolatokat, és minden másolt fájl neve mellett az aktuális dátum szerepelhet. A parancsfájlok nem csak parancsok meghívásai. Önálló programok. A parancsfájlok lehetővé teszik a programozási funkciók - például a „for” ciklusok, az if / then / else utasítások stb. - használatát közvetlenül az operációs rendszer felületén. És nem kell más nyelvet tanulnia, mert azt használja, amit már tud: a parancssort.

Azt hiszem, ez valóban a szkriptek ereje. A már ismert parancsokkal programozhat, miközben megtanulja a legtöbb fontosabb programozási nyelv alapelveit. Meg kell tennie valami ismétlődő és unalmas dolgot? Írja le! Szüksége van egy parancsikonra egy igazán összevissza parancshoz? Írja le! Szeretne egy igazán könnyen használható parancssori felületet felépíteni valamihez? Írja le!

Mielőtt elkezded

Mielőtt elkezdenénk a szkriptek sorozatát, térjünk át néhány alapvető információra. A bash héjat fogjuk használni, amelyet a legtöbb Linux disztribúció natív módon használ. A Bash Mac OS és Windows Cygwin felhasználók számára is elérhető. Mivel annyira univerzális, a platformtól függetlenül képesnek kell lennie a szkriptelésre. Ezenkívül mindaddig, amíg az összes hivatkozott parancs létezik, a szkriptek több platformon is működhetnek, csekély vagy anélkül, hogy módosítanák őket.

A szkriptek segítségével egyszerűen kihasználhatók az „adminisztrátor” vagy a „szuperfelhasználó” privilégiumok, ezért a legjobb, ha a szkripteket még a működésük előtt tesztelik. Használja a józan észt is, például győződjön meg arról, hogy vannak-e biztonsági másolatai azokról a fájlokról, amelyeken szkriptet futtatni készül. Az is nagyon fontos, hogy a megfelelő opciókat használja, mint például az –i az rm parancshoz, hogy szükség legyen az interakcióra. Ez megakadályozhat néhány csúnya hibát. Mint ilyen, olvassa el a letöltött szkripteket, és legyen óvatos a rendelkezésére álló adatokkal, hátha a dolgok rosszra fordulnak.

Alapjában véve a szkriptek csak egyszerű szöveges fájlok. Bármelyik szövegszerkesztővel megírhatja őket: gedit, emacs, vim, nano ... Ez a lista folytatódik. Csak mindenképpen mentse egyszerű szövegként, ne gazdag szövegként, vagy Word-dokumentumként. Mivel imádom a nano egyszerű használatát, ezt fogom használni.

Szkript engedélyek és nevek

A szkripteket a programokhoz hasonlóan futtatják, és ennek érdekében megfelelő engedélyekkel kell rendelkezniük. A szkripteket futtathatóvá teheti a következő parancs futtatásával:

chmod + x ~ / somecrazyfolder / script

Ez lehetővé teszi, hogy bárki futtassa az adott szkriptet. Ha csak a felhasználójára kívánja korlátozni a használatát, akkor ezt használhatja:

chmod u + x ~ / somecrazyfolder / script

A szkript futtatásához cd-t kell beírnia a megfelelő könyvtárba, majd a következő módon kell futtatnia:

cd ~ / somecrazyfolder

./script1

A dolgok kényelmesebbé tétele érdekében a szkripteket elhelyezheti a saját könyvtárának „bin” mappájában:

~ / bin

Sok modern diszkóban ez a mappa már nem alapértelmezés szerint jön létre, de létrehozhatja. Általában itt tárolnak olyan futtatható fájlokat, amelyek a felhasználójához tartoznak, nem pedig más felhasználókhoz. A szkriptek ide helyezésével egyszerűen futtathatja őket úgy, hogy beírja a nevüket, csakúgy, mint a többi parancsot, ahelyett, hogy CD-t kellene használnia és az './' előtagot kellene használnia.

A szkript megnevezése előtt azonban a következő paranccsal ellenőrizze, hogy van-e telepítve egy program, amely ezt a nevet használja:

melyik [parancs]

Sokan korai szkriptjeiket „tesztnek” nevezik, és amikor megpróbálják futtatni a parancssorban, semmi sem történik. Ennek oka, hogy ütközik a teszt paranccsal, amely érvek nélkül nem csinál semmit. Mindig győződjön meg arról, hogy a parancsfájlnevek nem ütköznek-e a parancsokkal, különben előfordulhat, hogy olyan dolgokat hajt végre, amelyeket nem kíván megtenni!

Szkriptelési irányelvek

Mint korábban említettem, minden szkriptfájl lényegében egyszerű szöveg. Ez nem azt jelenti, hogy akarva-akaratlanul is megírhatod, amit akarsz. Amikor egy szöveges fájlt megpróbálnak végrehajtani, a héjak elemzik rajtuk keresztül a nyomokat, hogy szkriptek-e vagy sem, és hogyan kezeljenek mindent megfelelően. Emiatt van néhány irányelv, amelyet tudnia kell.

  1. Minden szkriptnek a „#! / Bin / bash” karakterrel kell lennie
  2. Minden új sor egy új parancs
  3. A megjegyzés sorai # -gal kezdődnek
  4. A parancsokat körülveszi ()

A Hash-Bang Hack

Amikor egy héj elemzi a szöveges fájlt, akkor a fájl közvetlen azonosítása az első sor megadásával:

#! / bin / bash

Ha másik héjat használ, akkor itt cserélje le az útvonalát. A megjegyzéssorok kivonatokkal (#) kezdődnek, de a bumm (!) És a héj elérési útjának hozzáadása után ez egyfajta hackelés, amely megkerüli ezt a megjegyzésszabályt, és arra kényszeríti a parancsfájlt, hogy futtassa azt a héjat, amelyre ez a sor mutat.

Új sor = Új parancs

Minden új sort új parancsnak, vagy egy nagyobb rendszer alkotóelemének kell tekinteni. Például az if / then / else utasítások több sort is átvesznek, de a rendszer minden alkotóeleme új sorban van. Ne hagyja, hogy egy parancs elvérezzen a következő sorba, mert ez megcsonkíthatja az előző parancsot, és hibát okozhat a következő sorban. Ha a szövegszerkesztője ezt csinálja, kapcsolja ki a szövegburkolást, hogy biztonságban lehessen. Az ALT + L billentyűkombinációval kikapcsolhatja a szövegburkolást nano bitben.

Hozzászólás gyakran #s

Ha egy sort # -val indít, akkor a sort figyelmen kívül hagyja. Ez megjegyzéssorokká alakítja, ahol emlékeztetheti magát arra, hogy mi volt az előző parancs kimenete, vagy mit fog tenni a következő parancs. Ismét kapcsolja ki a szövegburkolást, vagy szakítsa meg a megjegyzéseket több sorra, amelyek mind kivonattal kezdődnek. A sok megjegyzés használata jó gyakorlat, mivel lehetővé teszi, hogy Ön és más emberek könnyebben módosítsák a szkripteket. Az egyetlen kivétel a fent említett Hash-Bang hack, ezért ne kövesse a # -eket! -Ekkel. ;-)

A parancsokat zárójelek veszik körül

Régebbi időkben a parancsok cseréjét egyetlen pipa jelekkel hajtották végre (`, megosztja a ~ billentyűt). Erre még nem fogunk kitérni, de mivel az emberek többsége elmegy és felfedezi az alapok megtanulása után, valószínűleg érdemes megemlíteni, hogy inkább zárójeleket kell használni. Ez főleg azért van, mert ha fészkel - parancsokat tesz más parancsokba - a zárójelek jobban működnek.

Az első szkripted

Kezdjük egy egyszerű szkriptel, amely lehetővé teszi fájlok másolását és a dátumokat a fájlnév végéhez fűzve. Nevezzük „datecp” -nek. Először ellenőrizzük, hogy ez a név ütközik-e valamivel:

Láthatja, hogy a melyik parancsnak nincs kimenete, ezért mindannyian ezt a nevet használjuk.

Hozzunk létre egy üres fájlt a ~ / bin mappában:

érintse meg a ~ / bin / datecp elemet

És most változtassuk meg az engedélyt, mielőtt elfelejtjük:

Akkor kezdjük el felépíteni a forgatókönyvet. Nyissa meg azt a fájlt a választott szövegszerkesztőben. Mint mondtam, szeretem a nano egyszerűségét.

nano ~ / bin / datecp

És folytassuk, írjuk be az előfeltétel első sorát, és egy megjegyzést arról, hogy ez a szkript mit csinál.

Ezután deklaráljuk egy változót. Ha valaha is használtál algebrát, akkor valószínűleg tudod, mi ez. Egy változó lehetővé teszi számunkra az információk tárolását és a velük kapcsolatos dolgokat. A változók máshol hivatkozva „kibővülhetnek”. Vagyis ahelyett, hogy megjelenítenék a nevüket, a tárolt tartalmukat jelenítik meg. Később elmondhatja ugyanannak a változónak, hogy különböző információkat tároljon, és az utána bekövetkező minden utasítás felhasználja az új információt. Nagyon divatos helyőrző.

Mit teszünk ki a változóból? Nos, tároljuk a dátumot és az időt! Ehhez meghívjuk a date parancsot.

Nézze meg az alábbi képernyőképet a date parancs kimenetének felépítéséhez:

Láthatja, hogy a% kezdetű különböző változók hozzáadásával megváltoztathatja a parancs kimenetét a kívántra. További információkért tekintse meg a dátum parancs kézi oldalát.

Használjuk a date parancs utolsó iterációját: „date +% m_% d_% y-% H.% M.% S”, és ezt használjuk a szkriptünkben.

Ha most mentenénk ezt a szkriptet, akkor futtathatnánk, és ez megadná a date parancs kimenetét, amire számítottunk:

De tegyünk valami mást. Adjunk egy változó nevet, például a date_formatted ehhez a parancshoz. Ennek megfelelő szintaxisa a következő:

változó = $ (command –options argumentumok)

Nekünk pedig így építenénk:

date_formatted = $ (dátum +% m_% d_% y-% H.% M.% S)

Ezt hívjuk parancshelyettesítésnek. Lényegében azt mondjuk a bash-nak, hogy amikor megjelenik a „date_formatted” változó, futtassa a parancsot a zárójelben. Ezután a parancsok bármelyik kimenetét meg kell jeleníteni a változó neve, a „date_formatted” helyett.

Íme egy példa a szkriptre és annak kimenetére:

Vegye figyelembe, hogy a kimenetben két szóköz található. Az echo parancs idézőjelében és a változó előtti szóköz egyaránt megjelenik. Ne használjon szóközt, ha nem szeretné, hogy megjelennek. Vegye figyelembe azt is, hogy e hozzáadott „visszhang” sor nélkül a szkript semmilyen kimenetet nem ad.

Térjünk vissza a forgatókönyvünkhöz. Adjuk hozzá a parancs másolási részéhez.

cp –iv $ 1 $ 2. $ date_formatted

Ez meghívja a copy parancsot az –i és –v opciókkal. Az előbbi ellenőrzést kér tőled, mielőtt felülírná a fájlokat, az utóbbi pedig megmutatja, mi van a parancssorban.

Ezután láthatja, hogy felvettem a „$ 1” opciót. Szkripteléskor egy dollárjel ($) és egy szám követi a parancsfájl számozott argumentumát, amikor meghívták. Például a következő parancsban:

cp –iv Trogdor2.mp3 csengőhang.mp3

Az első argumentum a „Trogdor2.mp3”, a második a „ringtone.mp3”.

Visszatekintve a szkriptünkre láthatjuk, hogy két érvre hivatkozunk:

Ez azt jelenti, hogy a szkript futtatásakor két argumentumot kell megadnunk a szkript megfelelő futtatásához. Az első argumentum, a $ 1, az a fájl, amelyet átmásolunk, és a „cp –iv” parancs első argumentumaként helyettesítjük.

A második argumentum, a $ 2 ugyanazon parancs kimeneti fájljaként fog működni. De azt is láthatja, hogy ez más. Hozzáadtunk egy pontot, és felülről hivatkoztunk a „date_formatted” változóra. Kíváncsi, hogy mit csinál ez?

A szkript futtatásakor a következő történik:

Láthatja, hogy a kimeneti fájl fel van tüntetve, amit beírtam $ 2-ért, utána következik egy pont, majd a date parancs kimenete! Van értelme, igaz?

Most, amikor futtatom a datecp parancsot, ez futtatja ezt a szkriptet, és lehetővé teszi számomra, hogy minden fájlt átmásoljak egy új helyre, és automatikusan hozzáadjam a dátumot és az időt a fájlnév végéig. Hasznos a dolgok archiválásához!

A Shell szkriptek az operációs rendszer működésének középpontjában állnak. Ennek megvalósításához sem kell új programozási nyelvet megtanulnia. Próbálja ki a parancsfájlokat néhány alapvető parancs segítségével otthon, és kezdje el gondolkodni azon, hogy mire használható.

Szkriptelsz? Van tanácsod újoncoknak? Ossza meg gondolatait a megjegyzésekben! Ebben a sorozatban még sok minden jön!