Bash példával

Alapjai programozás bash

Meg kell még nem tudom képzelni, miért kell tanulni programozást bash. Íme néhány ok:

Bash már a rendszer

Ha megnézed. akkor valószínűleg azt találjuk, hogy a bash már fut a rendszeren. Még ha egy másik shell, mint a kagyló, bash bizonyos beállított, mert ez egy szabványos shellparancsot Linux. Mivel bash már fut, szkriptek végrehajtását írt bash-e hatásos, mert részesedése része a RAM már futó bash folyamat. És miért letöltés másik tolmácsot, ha már van egy bash, amely teszi a dolgát, és jól működik?

Te már használja azt

De nem csak a bash fut a rendszer, akkor kölcsönhatásba lépnek velük naponta. Ő mindig ott van, így van értelme, hogy megtanulják, hogyan kell bánni velük, hogy teljes mértékben kihasználja az összes képességeit. Ezt követően, a kommunikáció a Linux lesz több móka és produktív. De miért kellene megtanulni programozni? Ez egyszerű: meg kell gondolni, a teljesítmény programokat, fájlokat másolni és kimenet átirányítás programokat. Van most meg kell tanulni a nyelvet, amely lehetővé teszi, hogy építeni ezeket az egyszerű elemek erős és takarít meg időt szerkezetek amit megszoktunk? A héj megnyitja a teljes potenciálját a UNIX. A bash a Linux shell. Ő köti össze a számítógéppel. Miután tanulmányozta a bash, akkor automatikusan növeli a termelékenységet használó UNIX vagy Linux - minden olyan egyszerű.

Mielőtt elkezdené

Bash a rossz megközelítés a tanulmány a nyelv összezavarni téged. Sok kezdő kerülnek bevezetésre man bash parancsot olvasni a GYIK oldalt, amelyen csak egy rövid műszaki leírása héj funkciót. Mások hívja info bash (megtekintéséhez dokumentáció info formátumban), de kap ugyanazon az oldalon, vagy kézi, vagy egy kicsit több felhasználóbarát anyagot.

A kezdők is egy kicsit csalódott, hogy megtanulják, hogy a szabvány által nem biztosítja az összes információt, és azon felhasználók számára már jól ismerik az alapokat a programozás héj. A kézi sok nagy, szervezett műszaki információkat, de a kezdők számára előnyös kicsi.

Ez a cikksorozat segít megszokja a parancssorban. Ez a leírás bemutatja, hogyan kell használni az alapvető szintaxis borító design nyelv írásban a szkripteket. Megpróbálok mindent megmagyarázni egyszerű nyelven úgy, hogy ne csak megértsék, hogyan működik mindez, de rájött, hogyan kell használni. Miután elolvasta ezt a cikksorozatot, akkor megtanulják, hogyan kell írni a saját szkripteket és akkor érzik magukat a parancssorban. Ezt követően lesz képes pótolni tudásukat olvasva (és megértését!) A szokásos dokumentáció a bash. Kezdjük.

környezeti változók

Bash változó-e lehet meghatározni a következő módszerrel:

$ Myvar = 'Ez az én környezeti változó!

Ez a parancs létrehoz egy változót a „myvar”, amely tartalmazza a vonal „Ez az én környezeti változó!”. Meg kell jegyezni, hogy: Először is, amely a „=” nem tartalmazhat szóközt; (Próbáld ki, és meglátja, hogy egy csapat terek tolmács termel hiba). Másodszor, ha az érték a változó tartalmazza szóköz vagy tab, akkor helyezze azt idézőjelek közé.

Megjegyzés: További információ felhasználásával idézőjel bash, lásd „idézve” a man bash oldalon. A létezése speciális karakter szekvenciák, hogy a tolmács helyett más eszközökkel teszi magyarázatot karaktersorozatot bash túl bonyolult. Ezért fogjuk mondani csak a leggyakrabban használt módszerek idézve.

Harmadszor, akkor általában kétszeres idézőjelek helyett egyetlen, de ebben a példában a kettős idézőjelek hibát okoznak a tolmács, mivel az értéke a változó tartalmazza az egyik speciális karakterek (melyek közül a fent említett megjegyzés) - de belül a „!” egyetlen idézetek, nincs speciális karakterek nem működnek. „!” Karakter az bash felelős az úgynevezett „HISTORY bővítése” - dolgozik a fájlt parancssorból történelem (a részleteket lásd a kézikönyvben.). A nézi a tény, hogy a funkció, akiknek a kórtörténetében parancsok segítségével a „!” Nagyon hasznos lehet most azt szeretné látni, hogy egyszerűen, mint egy felkiáltójel.

Lássuk, hogyan lehet olvasni az értéke a változó:

$ Echo $ myvar Ez az én környezeti változó!

Elhelyezés a változó neve $ jel. elmondjuk a tolmács, amelyeket meg kell helyettesíteni az értékét. Ez az úgynevezett helyettesítő változó (változó helyettesítés / expanziós).

Meg kell jegyezni, hogy a változók neveit a bash érzékeny. Például myvar és MyVar - a nevét a különböző változók.

De mi történik, ha mégis megpróbálja:

$ Echo ize $ myvarbar ize

Azt akartuk, hogy megjelenjen a felirat „fooEto én környezeti változó! Bar”, de nem történt semmi. Mi történt? A tolmács nem volt képes meghatározni az értékét egy változó nevét kell behelyettesíteni ($ m, $ én, $ myvar, $ myvarbar stb) Ilyen egyértelmű esetekben, akkor egyértelműen meg kell határozni a bash a változó nevét:

$ Echo ize $ bar fooEto én környezeti változó! Bár

Mint látható beírja a nevét a kívánt változót zárójelek, világosan jelzi, ha a tolmács változó, és ahol egy egyszerű szöveget. Expression $ myvar gyorsabb beírni, és működik a legtöbb esetben, de $ mindig működik helyesen. Mindkét kifejezés alatt egy változó, de meg kell használni a második (nadrágtartó), ha a változó neve nincs elválasztva a környező szöveg szóközzel vagy tab karaktert.

Térjünk vissza az említett érintkezési exportálni változókat. Az exportált változó automatikusan elérhetővé válik a script, vagy program indult, miután a kivitel. Shell-script tudja olvasni a változó értékét használja a beépített héja munka környezeti változók, és a program a C - segítségével getenv () függvényt. Itt van egy kis példa kód C nyelven, amelyet kinyomtathat és összeállítja. Segít, hogy nézd meg a környezeti változókat a C:

Mentse ezt a kódot a fájlban myenv.c. majd összeállítani:

$ Gcc myenv.c -o myenv

Ezt követően, a futtatható „myenv” fájl megjelenik az okokat, miközben dolgozik könyvtárban. Fuss, és ez viszi az értéket „Editor” változó (ha foglalt). Itt van az én eredmény:

$ ./myenv A szerkesztő környezeti változó beállítása (null)

Mivel a változó nincs definiálva, a szoftver nem tud hozzáférni. Hozzunk létre a változó, és rendelje hozzá néhány érték:

$ EDITOR = egérpad $ ./myenv A szerkesztő környezeti változó beállítása (null)

Így is, nem működik. Arra számítunk, hogy a program kiírja „egérpad”, de az eredmény nem változott. Ez azért történhetett, mert elfelejtette, hogy exportálja a változó „Editor”. Ekkor meg kell dolgozni:

$ Export EDITOR $ ./myenv A szerkesztő környezeti változó beállítása egérpad

Tehát van a példa győződve arról, hogy szempontokat a folyamat (ebben az esetben a C program) nem tudja elérni a környezeti változót, amíg nem exportálják. Ezen felül, akkor lehet meghatározni egy változót és exportálni, mint egy csapat:

Ez a parancs ugyanazt hajtja végre, mint a kétlépcsős változat (értéket rendelni és export). A megfelelő idő, hogy megmutassuk, hogyan lehet visszaállítani az értékét egy környezeti változót (más szóval -, hogy távolítsa el a változó) segítségével „hatástalanított”:

$ Hatástalanítás EDITOR $ ./myenv A szerkesztő környezeti változó beállítása (null)

Hogyan lehet elemezni a húr?

Feldolgozási húr - ez azt jelenti, hogy osszuk kisebb alkatrészeket. Ez az egyik leggyakoribb művelet, hogy fordulhat elő, ha írsz shell-scriptek. Néha szükség van egy script, hogy meghatározzák a neve egy adott fájl vagy könyvtár, tudva (abszolút) elérési útját. A bash megteheti mindezt egy paranccsal:

$ Basename /usr/local/share/doc/foo/foo.txt foo.txt $ basename / usr / home / drobbins drobbins

„Basename” - egy nagyon hasznos segédprogram felosztása stringeket alkatrészeket. A második csapat - „dirname” - visszaadja egy másik része a vonal (az elérési utat a könyvtárba, ahol a fájl található):

$ Dirname /usr/local/share/doc/foo/foo.txt / usr / local / share / doc / foo $ dirname / usr / home / drobbins / / usr / home

Megjegyzés. Team „basename” és „dirname” nem érzékeli a jelenlétét egy fájl vagy könyvtár a fájlrendszerben, és a munka csak a húrok.

parancskiegészítést

Ez nagyon hasznos, hogy tudja, hogyan kell beállítani egy változót a egy parancs kimenete. Legyen nagyon egyszerű:

$ Sajatkonyvtar = $ (könyvtárnév /usr/local/share/doc/foo/foo.txt) $ echo $ sajatkonyvtar / usr / local / share / doc / ize

Mit tettünk az úgynevezett parancs cserét. Az első sorban a példában most megkötött egy csapat az építőiparban a $ ().

Vegyük észre, hogy ugyanazt a dolgot lehet tenni alkalmazása helyett tervezés $ () backtick `` (billentyű felett közvetlenül a Tab billentyűt):

$ Sajatkonyvtar = `dirnév / usr / local / share / doc / foo / foo.txt` $ echo $ sajatkonyvtar / usr / local / share / doc / ize

A Bache, mint láttuk, lehetséges, hogy egy intézkedés több különböző módon. Parancs használatával helyettesítés, el tudjuk helyezni semmilyen parancsot backquotes, vagy az építési $ () függvényt, akkor a kimeneti változó. Egy nagyon hasznos dolog! Íme egy példa arra, hogyan kell használni a helyettesítés és sorba kapcsolt csövön keresztül:

$ MYFILES = $ (ls -1 / etc | grep ^ PA) $ echo $ MYFILES pam.conf pam.d pango PAPERSIZE passwd passwd-

$ MYFILES = $ (ls $ (dirname foo / bar / oni))

Hasító sorok szakemberek

„Basename” és „dirname” csodálatos eszköz, de vannak esetek, amikor szükség van, hogy végre bonyolultabb műveleteket húrok, mint a manipuláció módon. A hatékonyabb munka string lehet használni a beépített helyettesítése változó értékeket bash. Korábban már használta a helyettesítő változókat, hogy így néz ki: $. De bash és beépített string manipuláció. Nézzük meg a következő példát:

$ MYVAR = foodforthought.jpg $ echo $ rthought.jpg $ echo $ odforthought.jpg

Mit az építőiparban a $ az előző példa? Mi írta $<> a változó nevét, majd két hash mark (vagy hash mark, mint bárki más szokásos) és a minta ( "* fo"). Bash vette a változó „MYVAR” található a legtöbb a string hossza alsztringjeként „foodforthought.jpg” (a sor elejére), amely egybeesett a mintát „* fo”, és törölte azt. Az első alkalommal az e finomságok nehéz megérteni. Ahhoz, hogy megértsük, hogyan tervezési munkák ##. nézzük meg lépésről lépésre, hogyan néz ki a bash részkarakterláncként illeszkednek a mintára. Elkezd keresni részkarakterláncként illeszkedő minta „* fo” elejétől a string „foodforthought.jpg”. Itt megtalálja az összes ilyen részsztring:

f fo egybeesik a mintát "* fo" valami étel foodf foodfo egyezik a minta "* fo" foodfor foodfort foodforth foodfortho foodforthou foodforthoug foodforthought foodforthought.j foodforthought.jp foodforthought.jpg

Az ellenőrzés után mindezek a lehetőségek, a két vonal talált tartozó sablont. Bash kiválasztja a leghosszabb őket, majd törli azt a rész, és visszaadja az eredményt.

A második forma a változó helyettesítés a bemutatott példában eltér az első csak jelenlétében egy (#) jel, kettő helyett. És bash azonos eljárást követ, azzal az eltéréssel, hogy eltávolítja a nem a leghosszabb és a legrövidebb az részsztring illeszkedik a minta. Mint látható, eltávolítása után a legrövidebb részsztring illeszkedik egy sablont (fo) mi marad a húr „odforthought.jpg”.

Ez úgy tűnik, nagyon zavaró, úgyhogy megmutatom, hogyan lehet gyorsan emlékezni ezt a funkciót bash. Ha megnézzük a leghosszabb mérkőzés, akkor használjon két hash (##), mint „##” hosszabb „#”. És amikor keresi a legrövidebb meccs, használja #. Lásd, nem is olyan nehéz! Várj, hogyan emlékszik, hogy a keresés elejétől kezdődik a sor? Nagyon egyszerű! Megjegyezzük, hogy a Shift-4 ad nekünk a $ jel használják bash helyettesítését a változó értékét az angol billentyűzetkiosztást. Mielőtt a jel a billentyűzeten $ # (mintha az elején), és így a „#” eltávolítja a karaktereket a sor elejére. Akarod tudni, hogyan kell törölni egy karaktersorozat a sor végére. Mint azt sejteni lehet, ez történik a megjelölés használata (%) található, a billentyűzet után azonnal „$”. Itt van egy kis példa eltávolítását a sor végére:

$ MYFOO = "chickensoup.tar.gz" $ echo $ chickensoup $ echo $ chickensoup.tar

Mint látható, szimpla és dupla százalék jelek (%% és%) is dolgozik, mint „#” és „##”, hanem távolítsa el azt a rész illeszkedik egy sablont a sor végére. Ne feledje, hogy nem tudja használni a „*”, ha szeretné törölni néhány konkrét a sor végére.

Ebben a példában nincs különbség, vagy %%% használat miatt csak egy mérkőzés. És ne felejtsük el, ha a „#” vagy „%”, hogy nézd meg a 3.4 és 5 gombokat a billentyűzeten.

Tudjuk használni egy másik formája a helyettesítési a változó értéke kivonat részkarakterláncként egy adott hosszúságú, és kiindulási helyzet:

Ez a forma nagyon kényelmes. Csak adja kettősponttal elválasztva kezdőpozíciójának a részsztring - az első szám és a hossza a részsztring - a második számot.

Alkalmazása hasító vonalak

határvonalakat megtanulták, írjunk egy kis shell-script. A script elfogadja egyetlen érv - a fájl nevét, és ha a fájl kiterjesztése a .tar, a szkript jelenti, hogy ez a csomag. (Valójában milyen típusú fájl bővítése nem megfelelő erre a célra van egy parancs fájl példa csak demonstrációs célokat ...) Itt a script:

#! / Bin / bash if [ "$" = "tar"] then echo "Úgy tűnik, ezt a tar." else echo „Első pillantásra ez nem így csomag.” fi

Az első sorban kell feltétlenül jelen minden script. Ez azt mutatja, az utat, hogy a tolmács, aki elvégzi a forgatókönyvet. A szintaxis a látható példa - „#!<путь к интерпретатору>”.

Mentse el a szkript szövegét a például mytar.sh fájlt. majd módosítsa a hozzáférési jogot biztosít „chmod 755 mytar.sh” (ez lehetővé teszi majd a futtatható fájl). Végül futtatni a szkriptet az érvelés, mint egy fájl nevét, ahogy azt a következő példa:

$ ./mytar.sh thisfile.tar gondolja ezt a tar. $ ./mytar.sh thatfile.gz Első pillantásra ez nem így csomag.

Nos, valami működik, de nem nagyon funkcionális. Mielőtt javítani a forgatókönyvet, ha figyelembe vesszük a design. A azokban használt. A zárójelben összehasonlítjuk két vonal ( „=” - egy összehasonlító szereplő bash). A összehasonlításának eredménye - egy logikai kifejezés „hamis” vagy „igaz” (true vagy false). De lássuk, milyen húrok hasonlítjuk össze. Ahhoz, hogy a megfelelő világos - vonal „tar”. Balról számunkra, hogy megértsük a fenti kifejezés, eltávolítja a felső sorban a $ 1 a minta. „*” (Az egész sor az utolsó pont, mivel a két hash ## van). E művelet után a helyettesítés csak egy része a sor utolsó pontja után - más szóval bővítése. Ha a változó $ 1 tartalmazza a nevét, a fájl kiterjesztése „tar”, az eredmény egy karakterlánc-összehasonlítás lesz egy logikai igaz.

Akkor valószínűleg kíváncsi, hogy miért, amikor ellenőrzi a feltételeket használtuk változó a „$ 1”. Ez nagyon egyszerű: a változó $ 1 található az első argumentum a script ($ 2 - A második érv, és így tovább). Ezzel a funkcióval, megértette, figyeljük most meg több tervezési választás feltételes „ha”.

az if

Mint sok programozási nyelvek, bash van feltételes. Ezek az alábbiakban leírt formátumban. Legyen óvatos: a „ha” és a „majd” kell külön sorban. Próbálja összehangolni vízszintesen az egész szerkezet, beleértve a végső „fi”, és minden „más”. Ez teszi a kódot sokkal könnyebb olvasni és debug. Amellett, hogy egy egyszerű formáját „ha más”, több egyéb feltételes:

ha a [állapot], akkor akció fi

A fenti példában a „cselekvés” csak akkor kerül végrehajtásra, ha „feltétel” igaz, ellenkező esetben a script továbbra utasítások végrehajtására egy vonal megy „fi”.

ha a [feltételek], majd fellépés elif [uslovie_2], majd Action_2 elif [uslovie_3], majd. mást deystvie_x fi

És ez a szerkezet egymás ellenőrzi az állapotát, és ha igaz, akkor hajtsa végre a megfelelő műveletet. Ha egyik feltétel nem igaz, akkor a „deystvie_x” után jön az „else” (ha van ilyen). Majd folytatja parancsok végrehajtása jön ez a konstrukció „ha, akkor más”, ha van ilyen.

A következő rész

Ebben a cikkben, néztük alapfunkcióiba bash. Itt az ideje, hogy gyorsítsa fel egy kicsit, és elkezdi írni a saját shell-scriptek. A következő részben a könyv beszélek a funkciókat, ciklusok, névtér, és más fontos dolgokat. Ezt követően, mi lesz kész, hogy írjon egy viszonylag összetett írást. Találkozzunk ott!

lásd még

Kapcsolódó cikkek