A Shell Scripting Kezdõ Útmutatója: Az alapok

Tartalomjegyzék:

A Shell Scripting Kezdõ Útmutatója: Az alapok
A Shell Scripting Kezdõ Útmutatója: Az alapok

Videó: A Shell Scripting Kezdõ Útmutatója: Az alapok

Videó: A Shell Scripting Kezdõ Útmutatója: Az alapok
Videó: Google Maps vs Apple Maps (2023) - YouTube 2024, Április
Anonim
A "shell scripting" kifejezés gyakran szerepel Linux fórumokon, de sok felhasználó nem ismeri azt. Az egyszerű és erőteljes programozási módszer tanulásával időt takaríthat meg, jobban megtanulhatja a parancssort és elfojthatja az unalmas fájlkezelési feladatokat.
A "shell scripting" kifejezés gyakran szerepel Linux fórumokon, de sok felhasználó nem ismeri azt. Az egyszerű és erőteljes programozási módszer tanulásával időt takaríthat meg, jobban megtanulhatja a parancssort és elfojthatja az unalmas fájlkezelési feladatokat.

Mi a Shell Scripting?

Linux felhasználóként a parancssorral játszhatsz. Tetszik, akár nem, csak néhány dolog van, amit sokkal könnyebben végeznek ezen a felületen keresztül, mint rámutatva és kattintva. Minél többet használsz, és megtanulod a parancssort, annál nagyobb a potenciálja. Nos, maga a parancssor egy program: a shell. A legtöbb Linux disztribúció ma használja a Bash-et, és ez az, amire valóban beírod a parancsokat.

Néhányan közületek, akik a Windows használatát használta a Linux használata előtt, emlékezhetnek a kötegelt fájlokra. Ezek voltak a kis szöveges fájlok, amelyeket meg lehetett tölteni parancsokkal végrehajtani, és a Windows futtatni őket viszont. Ez okos és tisztességes módja annak, hogy néhány dolgot elvégezzenek, például futtassanak játékokat a középiskolai számítógépes laborban, amikor nem tudtok megnyitni a rendszermappákat vagy parancsikonokat létrehozni. A Windowsban található kötegfájlok, bár hasznosak, a shell parancsfájlok olcsó utánzata.

A Shell szkriptek lehetővé teszik a parancsok láncolatainak programozását, és a rendszer parancsfájlként végrehajtja őket, akár a kötegfájlokat. Ezenkívül sokkal több hasznos funkciót is lehetővé tesz, például a parancs helyettesítését. Meghívhatja a parancsot, például a dátumot, és felhasználhatja a kimenetet egy fájlnevezési séma részeként. Biztonsági másolatokat automatizálhat, és minden egyes másolt fájl az aktuális dátumot a név végéhez csatolhatja. A parancsfájlok nem csak parancsok meghívása. Programok a sajátjukon. A parancsfájl segítségével a programozási funkciók - például a "for" hurkok, ha / akkor / egyéb nyilatkozatok és így tovább - használhatók közvetlenül az operációs rendszer felületén. És nem kell tanulnod egy másik nyelvet, mert már használod azt, amit már tudsz: a parancssor.
A Shell szkriptek lehetővé teszik a parancsok láncolatainak programozását, és a rendszer parancsfájlként végrehajtja őket, akár a kötegfájlokat. Ezenkívül sokkal több hasznos funkciót is lehetővé tesz, például a parancs helyettesítését. Meghívhatja a parancsot, például a dátumot, és felhasználhatja a kimenetet egy fájlnevezési séma részeként. Biztonsági másolatokat automatizálhat, és minden egyes másolt fájl az aktuális dátumot a név végéhez csatolhatja. A parancsfájlok nem csak parancsok meghívása. Programok a sajátjukon. A parancsfájl segítségével a programozási funkciók - például a "for" hurkok, ha / akkor / egyéb nyilatkozatok és így tovább - használhatók közvetlenül az operációs rendszer felületén. És nem kell tanulnod egy másik nyelvet, mert már használod azt, amit már tudsz: a parancssor.

Ez valójában a szkriptek ereje, azt hiszem. Megismerkedhet a már ismert parancsokkal, miközben a legfontosabb programozási nyelvekről tanul. Kell valami ismétlődő és unalmas? Script it! Szüksége van egy parancsikonra egy igazán összetévesztett parancsra? Script it! Szeretne egy igazán könnyen használható parancssori felületet létrehozni valamire? Script it!

Mielőtt elkezded

Mielőtt elkezdjük a szkriptsorozatot, fedjük le néhány alapvető információt. A bash-héjat használjuk, amelyet a legtöbb Linux disztribúció natívan használ. A Bash Mac OS felhasználók és a Cygwin Windows rendszeren is elérhető. Mivel olyan univerzális, a platformtól függetlenül képesnek kell lennie a forgatásra. Ezenkívül, mindaddig, amíg a hivatkozott parancsok mindegyike létezik, a szkriptek több platformon is dolgozhatnak, kicsit csípés nélkül.

A parancsfájlok egyszerűen használhatják az "adminisztrátor" vagy a "felettes felhasználó" jogosultságait, ezért a legjobb, ha tesztelni szeretné a szkripteket, mielőtt üzembe helyezné őket. Szintén használja a józan ész, mint például arról, hogy biztonsági másolatot készít a fájlokról, amelyeken szkriptet futtatsz. Nagyon fontos, hogy a megfelelő opciókat, például az -i parancsot használjuk az rm paranccsal, hogy az interakcióra szükség van. Ez megakadályozhat néhány csúnya hibát. Mint ilyen, olvasd el a letölteni kívánt szkripteket, és vigyázz az adatokra, csak akkor, ha a dolgok rosszul mennek.

A magukban a szkriptek egyszerű szöveges fájlok. Használhatsz bármilyen szövegszerkesztőt, hogy írni: gedit, emacs, vim, nano … Ez a lista folytatódik. Ügyeljen arra, hogy egyszerű szövegként mentse el, nem pedig gazdag szövegként vagy Word-dokumentumként. Mivel szeretem a nano által nyújtott könnyű használatot, ezt használom.

Script engedélyek és nevek

A parancsfájlok végrehajthatók, mint a programok, és ahhoz, hogy ez megtörténjen, meg kell adniuk a megfelelő engedélyeket. A parancsfájlokat végrehajthatóvá teheti a következő parancs futtatásával:

chmod +x ~/somecrazyfolder/script1

Ez lehetővé teszi, hogy bárki futtassa az adott szkriptet. Ha korlátozni szeretné annak használatát csak a felhasználó számára, használhatja ezt helyett:

chmod u+x ~/somecrazyfolder/script1

Ennek a szkriptnek a futtatásához cd-nek kell a megfelelő könyvtárba, majd futtatni a parancsfájlt, mint ez:

cd ~/somecrazyfolder

./script1

A dolgok kényelmesebbé tétele érdekében szkripteket helyezhet el egy "bin" mappába a saját könyvtárában:

~/bin

Sok modern tárhelyen ez a mappa alapértelmezés szerint már nem jön létre, de létrehozhat. Ez általában olyan fájlokat tárol, amelyek a felhasználóhoz tartoznak, és nem a többi felhasználó számára. Ha itt helyezi a parancsfájlokat, akkor csak a többi parancs használatával futtathatja őket a nevük beírásával, ahelyett, hogy cd-t kellene használniuk a "./" előtag használatával.

Mielőtt elneveznénk egy szkriptet, ellenőrizzük a következő parancsot, hogy van-e telepítve egy program, amely ezt a nevet használja:

which [command]

Sokan nevezik korai szkriptjeiket "tesztnek", és amikor megpróbálják futtatni a parancssorban, semmi sem történik. Ez azért van, mert ellentmond a teszt parancsnak, ami semmit sem tesz érvek nélkül. Mindig győződjön meg róla, hogy a parancsfájlnevek nem ütköznek a parancsokkal, különben előfordulhat, hogy olyan dolgokat teszel, amelyeket nem szándékozik tenni!

Scripting Guidelines

Mint korábban említettem, minden parancsfájl lényegében egyszerű szöveg.Ez nem azt jelenti, hogy bármit írni tudsz, amit akarsz, bármit. Amikor egy szövegfájlt megpróbálnak végrehajtani, a héjok elemzést végeznek rajta, hogy vannak-e parancsfájlok, és hogy hogyan kell mindent kezelni. Emiatt néhány iránymutatást kell tudni.
Mint korábban említettem, minden parancsfájl lényegében egyszerű szöveg.Ez nem azt jelenti, hogy bármit írni tudsz, amit akarsz, bármit. Amikor egy szövegfájlt megpróbálnak végrehajtani, a héjok elemzést végeznek rajta, hogy vannak-e parancsfájlok, és hogy hogyan kell mindent kezelni. Emiatt néhány iránymutatást kell tudni.
  1. Minden szkriptnek a "#! / Bin / bash"
  2. Minden új sor egy új parancs
  3. A megjegyzések sorai #
  4. A parancsokat ()

A Hash-Bang Hack

Ha egy shell egy szövegfájlban elemzi, akkor a fájl közvetlen szkriptként való azonosításának legközvetlenebb módja az első sor:

#!/bin/bash

Ha egy másik héjat használ, cserélje ki itt az útvonalat. A megjegyzések sorai a hashokkal kezdődnek (#), de a bang (!) És a shell elérési útvonala után ez egyfajta hack, amely megkerüli ezt a megjegyzés szabályt, és kényszeríti a parancsfájlt a shell által végrehajtott parancs végrehajtására.

Új sor = Új parancs

Minden új sort egy új parancsnak vagy egy nagyobb rendszer egyik összetevőjének kell tekinteni. Ha a / then / else utasítások például több sorra vesznek át, de a rendszer minden egyes eleme új sorban van. Ne hagyja, hogy a parancs a következő sorba vigyázzon, mert ez megszakíthatja az előző parancsot, és hibát adhat a következő sorra. Ha a szövegszerkesztő ezt teszi, akkor a szöveges csomagolás kikapcsolása a biztonságos oldalra kell állnia. A szövegbevitelt nano bitben kikapcsolhatja, ha megnyomja az ALT + L billentyűt.

Hozzászólás Gyakran a # -al

Ha egy sorral kezdődik, akkor a sort figyelmen kívül hagyja. Ez egy megjegyzéssávká alakítja, ahol emlékeztetheti magát, hogy mi volt az előző parancs kimenete, vagy amit a következő parancs fog tenni. Ismételten kapcsolja ki a szöveges csomagolást, vagy tegyen megjegyzést több olyan sorra, amelyek mindegyike hashúzással kezdődik. Rengeteg megjegyzéseket használva jó gyakorlat, hogy megtartsd, mivel lehetővé teszi, hogy Ön és más emberek egyszerűbbé tegye a szkriptjeidet. Az egyetlen kivétel a fent említett Hash-Bang hack, tehát ne kövesse #s with! S.;-)

A parancsok körül vannak zárva

Régebbi napokban a parancscserék egy-egy jelöléssel (`, osztják a ~ kulcsot). Nem fogunk ezzel foglalkozni, de ahogy a legtöbb ember elindul, és feltárja az alapokat megtanulva, valószínűleg jó ötlet lenne megemlíteni, hogy helyettesítse a zárójeleket. Ez főként azért van, mert fészkeléskor - parancsokat helyeztek be más parancsokon belül - a zárójelek jobban működnek.

Az első forgatókönyve

Kezdjük egy egyszerű parancsfájllal, amely lehetővé teszi a fájlok másolását és dátumok hozzáadását a fájlnév végéhez. Nevezzük "datecp" -nek. Először ellenőrizzük, hogy ez a név összeegyeztet-e valamivel:

Láthatja, hogy nincs kimenete a parancsnak, így mindannyian arra van szükségünk, hogy ezt a nevet használjuk.
Láthatja, hogy nincs kimenete a parancsnak, így mindannyian arra van szükségünk, hogy ezt a nevet használjuk.

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

touch ~/bin/datecp

Most pedig változtassuk meg az engedélyt, mielőtt elfelejtjük:
Most pedig változtassuk meg az engedélyt, mielőtt elfelejtjük:
Kezdjük é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.
Kezdjük é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 menjünk előre, és tegyük fel az előfeltétel első sorát, és egy megjegyzést a scripthez.

Ezután írjunk változót. Ha valaha is vettél algebrát, akkor valószínűleg tudod, mi az. Egy változó lehetővé teszi számunkra, hogy információkat tároljunk és dolgozzunk vele. A változók "kiterjeszthetők", ha máshol hivatkoznak. Azaz, ahelyett, hogy megjelenítenék a nevüket, megjelenítik tárolt tartalmukat. Később ugyanazt a változót meg tudja adni különböző információk tárolásához, és az ezt követő utasítások az új információkat használják. Ez egy igazán díszes helyőrző.
Ezután írjunk változót. Ha valaha is vettél algebrát, akkor valószínűleg tudod, mi az. Egy változó lehetővé teszi számunkra, hogy információkat tároljunk és dolgozzunk vele. A változók "kiterjeszthetők", ha máshol hivatkoznak. Azaz, ahelyett, hogy megjelenítenék a nevüket, megjelenítik tárolt tartalmukat. Később ugyanazt a változót meg tudja adni különböző információk tárolásához, és az ezt követő utasítások az új információkat használják. Ez egy igazán díszes helyőrző.

Mit fogunk ki a változóba? Hát, tároljuk a dátumot és az időt! Ehhez felhívjuk a dátum parancsot.

Nézze meg az alábbi képernyőképet a dátum parancs kimenetének elkészítéséhez:

Használjuk a dátum parancsnak a "dátum +% m_% d_% y-% H.% M.% S" utolsó iterációját, és ezt használjuk a szkriptünkben.

Ha most meg szeretnénk menteni ezt a szkriptet, akkor futtathatnánk, és megadná nekünk a dátum parancs kimenetét, ahogyan elvárnánk:
Ha most meg szeretnénk menteni ezt a szkriptet, akkor futtathatnánk, és megadná nekünk a dátum parancs kimenetét, ahogyan elvárnánk:
De csináljunk valami mást. Adjuk meg a változó nevét, mint a date formatted erre a parancsra. Ennek megfelelő szintaxisa a következő:
De csináljunk valami mást. Adjuk meg a változó nevét, mint a date formatted erre a parancsra. Ennek megfelelő szintaxisa a következő:

variable=$(command –options arguments)

És számunkra, így építenénk:

date_formatted=$(date +%m_%d_%y-%H.%M.%S)

Ezt nevezzük parancs helyettesítésnek. Nyilvánvalóan azt mondjuk, hogy amikor a "date formatted" változó megjelenik, akkor a parancsot a zárójelben belül futtathatjuk. Ezután a parancsok által kiadott kimeneteket ki kell mutatni a változó neve helyett, "date formatted".
Ezt nevezzük parancs helyettesítésnek. Nyilvánvalóan azt mondjuk, hogy amikor a "date formatted" változó megjelenik, akkor a parancsot a zárójelben belül futtathatjuk. Ezután a parancsok által kiadott kimeneteket ki kell mutatni a változó neve helyett, "date formatted".

Íme egy példa szkript és kimenete:

Image
Image
Ne feledje, hogy a kimeneten két szóköz van. Megjelenik az echo parancs és a változó előtt álló tér idézőjelek közötti tér. Ne használjon szóközt, ha nem akarja, hogy megjelenjenek. Ezenkívül vegye figyelembe, hogy ehhez hozzáadott "echo" vonal nélkül a forgatókönyv semmilyen kimenetet nem ad.
Ne feledje, hogy a kimeneten két szóköz van. Megjelenik az echo parancs és a változó előtt álló tér idézőjelek közötti tér. Ne használjon szóközt, ha nem akarja, hogy megjelenjenek. Ezenkívül vegye figyelembe, hogy ehhez hozzáadott "echo" vonal nélkül a forgatókönyv semmilyen kimenetet nem ad.

Térjünk vissza a forgatókönyvünkhöz. Vessük be a parancs másolásakor.

cp –iv $1 $2.$date_formatted

Ez meghívja a másolási parancsot a -i és a -v opciókkal. Az előbbi meg fogja kérni az ellenőrzést, mielőtt felülírná a fájlt, és az utóbbi fogja megjeleníteni, mi van a parancssorban.
Ez meghívja a másolási parancsot a -i és a -v opciókkal. Az előbbi meg fogja kérni az ellenőrzést, mielőtt felülírná a fájlt, és az utóbbi fogja megjeleníteni, mi van a parancssorban.

Ezután látja, hogy hozzáadtam a "$ 1" opciót.A szkriptelés során egy dollárjel ($), amelyet egy szám követ, a forgatókönyv számozott argumentumát jelöli. Például a következő parancsban:

cp –iv Trogdor2.mp3 ringtone.mp3

Az első argumentum, a "Tuzdor2.mp3" és a második argumentum, "Äringring.mp3".

Visszatekintve a forgatókönyvünkhöz, láthatjuk, hogy két érvet hivatkozunk:

Ez azt jelenti, hogy ha futtatjuk a szkriptet, akkor két argumentumot kell megadnunk ahhoz, hogy a szkript megfelelően működjön. Az első argumentum, $ 1, az a fájl, amelyet másolni fognak, és amelyet a "parancsok", az első argumentum helyettesít.
Ez azt jelenti, hogy ha futtatjuk a szkriptet, akkor két argumentumot kell megadnunk ahhoz, hogy a szkript megfelelően működjön. Az első argumentum, $ 1, az a fájl, amelyet másolni fognak, és amelyet a "parancsok", az első argumentum helyettesít.

A második argumentum, $ 2, ugyanazon parancs kimeneti fájljaként fog működni. De azt is láthatja, hogy más. Hozzáadtunk egy időszakot, és a "felülnézeti" változót a fenti felirattal láttuk el. Érdekes, hogy mi ez?

Itt van, mi történik, amikor a szkript fut:

Láthatja, hogy a kimeneti fájl szerepel a 2 dollárba beírt értékek között, ezt követi egy periódus, majd a dátum parancs kimenete! Értelme van, igaz?
Láthatja, hogy a kimeneti fájl szerepel a 2 dollárba beírt értékek között, ezt követi egy periódus, majd a dátum parancs kimenete! Értelme van, igaz?

Most, amikor elindítom a datecp parancsot, akkor futtatni fogom ezt a szkriptet, és megengedem, hogy minden fájlt átmásoljon egy új helyre, és automatikusan hozzáadja a dátumot és az időt a fájlnév végéhez. Hasznos archiválásra!

A Shell szkriptje a legfontosabb, hogy az operációs rendszert az Ön számára működjön. Nem kell új programozási nyelvet tanulnod, hogy megtörténjen. Próbáljon parancsfájlokat készíteni néhány alapvető parancs segítségével otthon, és elgondolkodjon azon, hogy mit tudsz használni.

Szkriptet csinálsz? Van tanács az újoncoknak? Ossza meg gondolatait a megjegyzésekben! Még többet kell eljönni ebben a sorozatban!

Ajánlott: