Ebben az oktatóanyagban a héjszkriptekben használt két leghasznosabb bash kiterjesztést fogjuk elmagyarázni:
- $ () - a parancs helyettesítése
- $ {} - a paraméterhelyettesítés/változóbővítés
A Shell bővítményt hajt végre a szkripten, miután azt tokenekre osztották. A token karaktersorozat, amelyet a shell egyetlen egységnek tekint. Ez lehet szó vagy operátor.
A cikkben említett példákat és szkripteket egy Debian 10 Buster rendszeren futtattuk. Mindazonáltal könnyen megismételheti őket a legtöbb Linux -shell -en. Ebben az oktatóanyagban az alapértelmezett Debian parancssort, a Terminált használjuk. A Debianon az Alkalmazásindító keresősávján keresztül érheti el az alábbiak szerint:
Az alkalmazásindító eléréséhez egyszerűen nyomja meg a billentyűzet Super/Windows gombját.
$ () Parancs Csere
A hivatalos GNU Bash Reference kézikönyv szerint:
A parancs helyettesítése lehetővé teszi, hogy egy parancs kimenete helyettesítse a parancsot. A Bash a bővítést úgy hajtja végre, hogy végrehajtja a parancsot, és a parancs helyettesítését a parancs szabványos kimenetével helyettesíti, és az utólagos új sorokat törli. A beágyazott új sorok nem törlődnek, de a szóhasítás során eltávolíthatók. A parancs helyettesítése akkor következik be, ha egy parancsot az alábbiak szerint mellékelnek:
$(parancs)vagy
``parancs``
Például a következő visszhangparancsok helyettesítik a dátum parancs kimenetét bemenetként:
$kidobta$(dátum)$kidobta'dátum'
A parancs helyettesítéssel értéket is rendelhet egy változóhoz. Például a mai dátumot a TODAY változón keresztül nyomtatjuk a következőképpen:
$MA= $(dátum)$kidobta '$ TODAY'
A parancshelyettesítés másik segédprogramja a héjhurokban a bemenet megszerzése. Itt megpróbáljuk kinyomtatni az összes .txt fájlt a saját mappánkban a parancs helyettesítésével:
számárafban ben /itthon/neked/ *.txttedd
kidobta '$ f'
Kész
Parancshelyettesítés használata héjszkriptben
A fenti példák néhány módja annak, hogy kihasználhassuk a parancs helyettesítés erejét a parancsfájlban. Íme egy mintaállapot -jelentés, amelyet kinyomtathatunk a következő parancsfájl használatával:
#!/bin/shkidobta ***Állapotjelentés***
MA= $(dátum)
kidobta 'Ma van$ TODAY'
FELHASZNÁLÓK= $(ki | WC-az)
kidobta '$ USERSa felhasználók jelenleg bejelentkeztek '
UPTIME= $(dátum;üzemidő)
kidobta 'Az üzemidő az$ UPTIME'
A parancs helyettesítését háromszor használták ebben a szkriptben; a dátum, a bejelentkezett felhasználók és az üzemidő nyomtatásakor. A szkriptet a következőképpen mentettük:
Futtathatóvá tette, majd a következő paranccsal futtatta:
$chmod+ x állapot.sh$./statys.sh
Íme a status.sh szkriptünk kimenete:
Természetesen értelmesebb szkripteket is létrehozhat az imént említett példák követésével.
$ {} Paraméterhelyettesítés/bővítés
A Bash paraméter egy entitás, amelyet az értékek tárolására használnak. Egy paraméterre hivatkozhat egy szám, egy név vagy egy speciális szimbólum. Ha egy paraméterre szám hivatkozik, akkor azt a -nak nevezzük helyzeti paraméter . Ha egy paraméterre egy név hivatkozik, akkor a változó . Ha egy paraméterre egy speciális szimbólum hivatkozik, az azt jelenti, hogy ezek speciális felhasználású, automatikusan beállított paraméterek.
Paraméterbővítés/helyettesítés az érték lekérésének folyamata a hivatkozott entitásból/paraméterből. Olyan, mintha kibontana egy változót, hogy lekérje annak értékét.
A lehetséges legegyszerűbb paraméterbővítési szintaxis a következő:
Az alábbi módon használhatja a Bash paraméterbővítését:
$ {parameter}Például a legegyszerűbb használat a paraméter értékével való helyettesítése:
$név='gipsz Jakab'$kidobta $ {name}
Ez a parancs helyettesíti az echo parancs által használt változónév értékét:
Lehet, hogy azt gondolja, hogy ugyanezt el lehet érni a göndör zárójelek elkerülésével az alábbiak szerint:
A válasz az, hogy a paraméterbővítés során ezek a göndör zárójelek segítenek a változó nevének elhatárolásában. Magyarázzuk el, mit értünk itt korlátozás alatt. Hadd futtassam a következő parancsot a rendszeren:
$kidobta - A személy neve$ name_'Az eredmény nem nyomtatta ki a változó nevének értékét, mivel a rendszer úgy gondolta, hogy a name_ változóra hivatkozom. Így a változó nevem nem volt határolva. A következő példában szereplő göndör zárójelek határolják a változó nevét, és az eredményeket az alábbiak szerint adják vissza:
$kidobta - A személy neve$ {name}_ 'Íme, a Shell változóinak helyettesítési módjai:
$ {variable} | Ez a parancs helyettesíti a változó értékét. |
$ {változó: -word} | Ha egy változó null vagy nincs beállítva, akkor a szó helyettesíti a változót. A változó értéke nem változik. |
$ {változó: = szó} | Ha egy változó null vagy nincs beállítva, akkor a változó értéke szó lesz. |
$ {variable:? message} | Ha egy változó null vagy nincs beállítva, akkor az üzenet a szokásos bash hibára kerül nyomtatásra. |
$ {változó:+szó} | Ha változó be van állítva, szó helyettesíti a változót. Maga a változó értéke azonban nem változik. |
A fenti példák néhány módja annak, hogyan használhatja ki a változó helyettesítés erejét a Bash -ban. Ezeket a módszereket beépítheti a kiterjesztésbe a shell parancsfájlokban, hogy optimálisan elvégezze a feladatát.