A $ () és $ {} bővítmények használata Shell -szkriptben

How Use Expansions Shell Script



Ha Linux rendszert használ, akkor már tudja, mennyire fontos a héj interfész a rendszerrel való interakcióhoz. A legtöbb Linux disztribúcióban a Bash az alapértelmezett parancsértelmező, amelyet parancsok futtatására és parancsfájlok végrehajtására használunk. A shell parancsfájl olyan parancskészlet, amelyet végrehajtáskor néhány hasznos funkció (k) végrehajtására használnak Linux rendszeren. Ez a .sh fájl, amelyet egy felhasználó írt, tartalmazza a feladat végrehajtásához használt összes parancsot, hogy ne kelljen egyesével manuálisan futtatni ezeket a parancsokat.

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/ *.txt
tedd
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/sh

kidobta ***Á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.