Bash-skriptek: kezdet

Bash-skriptek: kezdet
Bash-scriptek, 2. rész: ciklusok
Bash-scriptek, 3. rész: paraméterek és parancssori kulcsok
Bash-scriptek, 4. rész: bemenet és kimenet
Bash-scriptek, 5. rész: jelek, háttérfeladatok, szkriptkezelés
Bash-scriptek, 6. rész: funkciók és könyvtárak fejlesztése
Bash-scriptek, 7. rész: sed és szövegfeldolgozás
Bash-scriptek, 8. rész: awk adatfeldolgozó nyelv
Bash-scriptek, 9. rész: reguláris kifejezések
Bash-scriptek, 10. rész: gyakorlati példák
Bash-scriptek, 11. rész: expect és interaktív segédprogramok automatizálása

Ma a bash-scriptekről fogunk beszélni. Ez — parancssori szkriptek, amelyeket a bash kabinettekhez írtak. Vannak más kabinettek is, mint például — zsh, tcsh, ksh, de mi a bash-ra fogunk összpontosítani. Ez az anyag mindenki számára készült, az egyetlen követelmény a parancssoron Linux.

Bash-skriptek: kezdet

A parancssori szkriptek olyan parancsok halmaza, amelyeket be lehet írni a billentyűzeten, fájlokba gyűjtve és egy közös célra összevonva. Ezen parancsok működésének eredménye önálló értékkel bírhat, vagy más parancsok bemeneteként szolgálhat. A szkriptek erőteljes módja a gyakran végzett műveletek automatizálásának.

Bash-skriptek: kezdet

Tehát, ha a parancssorra gondolunk, lehetővé teszi több parancs egyidejű végrehajtását, ha pontosvesszővel adja meg őket:

pwd ; whoami

Valójában, ha ezt kipróbáltad a terminálodban, az első bash-scripted, amely két parancsot használ, már meg is íródott. Így működik. Először a parancs pwd megmutatja a jelenlegi munkakönyvtár adatait, majd a parancs whoamimegmutatja a bejelentkezett felhasználó adatait.

Egy hasonló megközelítéssel annyi parancsot kombinálhatsz egy sorban, amennyit csak akarsz, a korlátozás csupán a maximális argumentum szám, amelyet a programnak átadhatsz. Ezt a korlátozást a következő parancs segítségével határozhatod meg:

getconf ARG_MAX

A parancssor nagyszerű eszköz, de a parancsokat minden alkalommal be kell írni, amikor szükség van rájuk. Mi lenne, ha egy parancsot egy fájlba írnál, és egyszerűen ezt a fájlt idéznéd elő a végrehajtáshoz? Valójában az a fájl, amiről beszélünk, a parancssori szkript.

Hogyan működnek a bash-scriptek

Hozz létre egy üres fájlt a következő parancs használatával: touchA fájl első sorában meg kell adni, hogy pontosan milyen környezetet fogunk használni. Minket a bashérdekel, így a fájl első sora a következőképpen fog kinézni:

#!/bin/bash

A fájl többi sorában a hashtagek megjegyzéseket jelölnek, amelyeket a környezet nem dolgoz fel. Azonban az első sor különleges eset, itt a hashtag után egy felkiáltójel áll (ezt a sorozatot hívjuk shebang), és a bashúton keresztül jelzik a rendszernek, hogy a szkript kifejezetten érte készült. bash.

A parancsokat sortörés választja el, a megjegyzéseket hashtag jelöléssel kiemeljük. Így néz ki:

#!/bin/bash
# This is a comment
pwd
whoami

Itt, akárcsak a parancssorban, parancsokat is írhatunk egy sorba, pontosvesszővel elválasztva. Azonban ha a parancsokat külön sorokban írjuk, a fájl könnyebben olvasható. Bárhogy is legyen, a környezet feldolgozza őket.

A szkript fájl jogosultságainak beállítása

Mentse el a fájlt a következő néven: myscript, és a bash-szkript létrehozása szinte befejeződött. Most már csak annyit kell tennie, hogy végrehajthatóvá teszi a fájlt, különben, ha megpróbálja futtatni, hibaüzenettel fog találkozni: Permission denied.

Bash-skriptek: kezdet
A szkript fájl futtatásának megkísérlése helytelenül beállított jogosultságokkal

Tegyük a fájlt végrehajthatóvá:

chmod +x .\/myscript

Most próbáljuk meg végrehajtani:

.\/myscript

A jogosultságok beállítása után minden úgy működik, ahogyan kell.

Bash-skriptek: kezdet
Sikeresen futó bash-szkript

Üzenetek megjelenítése

A szöveg kiírásához a Linux konzolba az echoparancsot használjuk. Éljünk a tudásunkkal, és szerkesszük meg szkriptünket, hozzáadva magyarázatokat a már meglévő parancsok által kiírt adatokhoz:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Így fog kinézni a frissített szkript futtatása után.

Bash-skriptek: kezdet
Üzenetek kiírása a szkriptből

Most már magyarázó feliratokat is kiírhatunk a echoparancs használatával. Ha nem tudja, hogyan kell módosítani egy fájlt a Linux eszközeivel, vagy nem találkozott még a echoparanccsal, nézze meg a az fordalmat.

Változók használata

A változók lehetővé teszik, hogy szkript-fájlokban tároljunk információt, például parancsok végrehajtásának eredményeit, hogy más parancsok is felhasználhassák azokat.

Nincs semmi rossz abban, ha külön parancsokat hajtunk végre anélkül, hogy a végrehajtásuk eredményét tárolnánk, de ennek a megközelítésnek a lehetőségei meglehetősen korlátozottak.

Két típusú változó létezik, amelyeket bash-szkriptekben használhatunk:

  • Környezeti változók
  • Felhasználói változók

Környezeti változók

Időnként a shell csapatokban szükség van bizonyos rendszeradatok kezelésére. Például így tudjuk megjeleníteni a jelenlegi felhasználó home könyvtárát:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Vegyük figyelembe, hogy a rendszer változót használhatjuk $HOME dupla idézőjelek között, ez nem akadályozza meg a rendszer felismerését. Íme, mi történik, ha végrehajtjuk a fenti scriptet.

Bash-skriptek: kezdet
Környezeti változó használata a scriptben

És mi van, ha a dollárjelet kell megjeleníteni a képernyőn? Próbáljuk így:

echo "I have $1 in my pocket"

A rendszer észleli a dollárjelet az idézőjelek közötti szövegben, és úgy dönt, hogy egy változóra hivatkozunk. A script megpróbálja kiírni egy nem definiált változó értékét $1. Ez nem az, amire szükségünk van. Mit tegyünk?

Ilyen helyzetben segíthet a vezérlőszimbólum, a visszafelé dőlt vonal használata a dollárjel előtt:

echo "I have $1 in my pocket"

Most a script pontosan az vártat fogja kiírni.

Bash-skriptek: kezdet
Vezérlő szekvencia használata a dollárjel megjelenítésére

Felhasználói változók

A környezeti változók mellett a bash-script-ek lehetővé teszik saját változók létrehozását és használatát a scriptben. Ezek a változók megőrzik értéküket, amíg a script végrehajtása be nem fejeződik.

A rendszer változókhoz hasonlóan a felhasználói változókra is a dollárjellel hivatkozhatunk:
TNW-CUS-FMP — egy promóciós kód, amellyel 10% kedvezményt kap a szolgáltatásainkra, 7 napon belül aktiválható.

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Ilyen eredmény keletkezik, ha elindítjuk ezt a scriptet.

Bash-skriptek: kezdet
Felhasználói változók a scriptben

Parancs behelyettesítése

A bash-szkriptek egyik leghasznosabb lehetősége a parancsok kimenetéről információk kiemelése és változókhoz rendelése, ami lehetővé teszi az információk bárhol való felhasználását a script fájlban.

Ezt két módon lehet megtenni.

  • A visszafelé aposztróf "`" használatával
  • A konstrukcióval $()

Az első megközelítésnél figyeljen arra, hogy a visszafelé aposztróf helyett ne vezessen be egy egyszeres idézőjelet. A parancsot két ilyen jel közé kell zárni:

mydir=`pwd`

A második megközelítésnél ugyanazt így írják:

mydir=$(pwd)

A script végül így nézhet ki:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Futása során a parancs kimenete pwdel lesz tárolva a mydirváltozóban, amelynek tartalma a echoparancs segítségével

Bash-skriptek: kezdet
a konzolra kerül.

Matematikai műveletek

A matematikai műveletek végrehajtásához a script fájlban a következő felépítést lehet használni: $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Bash-skriptek: kezdet
Matematikai műveletek a szkriptben

If-then vezérlési struktúra

Bizonyos szkriptekben szükség van a parancsok végrehajtásának folyamatának irányítására. Például ha egy érték nagyobb mint öt, akkor egy műveletet kell végrehajtani, különben egy másikat. Ez sok helyzetben alkalmazható, és ebben segít nekünk a vezérlési struktúra. if-then. A legegyszerűbb formája így néz ki:

if parancs
then
parancsok
fi

Íme egy működő példa:

#!/bin/bash
if pwd
then
echo "It works"
fi

Ebben az esetben, ha a parancs végrehajtása pwdsikeresen befejeződik, a konzolra a "it works" szöveg kerül kiírásra.

Használjuk fel a rendelkezésünkre álló tudást, és írjunk egy bonyolultabb szkriptet. Mondjuk, meg kell keresni egy felhasználót a /etc/passwd, és ha sikerült megtalálni, értesíteni kell arról, hogy létezik.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Íme, mi történik a szkript futtatása után.

Bash-skriptek: kezdet
Felhasználó keresése

Itt a grepparancsot használtuk a felhasználó keresésére a fájlban. /etc/passwd. Ha a parancs grepnem ismerős, annak leírását megtalálhatja itt.

Ebben a példában, ha a felhasználó megtalálható, a szkript megfelelő üzenetet ír ki. De mi történik, ha nem tudjuk megtalálni a felhasználót? Ebben az esetben a szkript egyszerűen befejezi a végrehajtást, anélkül, hogy bármit mondana. Szeretnénk, ha ezt is megmondaná nekünk, ezért javítjuk a kódot.

If-then-else vezérlési struktúra

Annak érdekében, hogy a program mind a sikeres keresés, mind a kudarc eredményeit közölni tudja, a következő felépítést fogjuk használni: if-then-else. Íme, hogyan van felépítve:

if parancs
then
parancsok
else
parancsok
fi

Ha az első parancs nulla értéket ad vissza, ami a sikeres végrehajtást jelenti, a feltétel igaz lesz, és a végrehajtás nem megy át az else. Ebben az esetben, ha valami nem nullát ad vissza, ami kudarcnak vagy hamis eredménynek számít, a következő parancsok végrehajtásra kerülnek. else.

Írjunk egy ilyen szkriptet:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Az végrehajtás az else.

Bash-skriptek: kezdet
If-then-else struktúrával indított szkript futási ágán haladt.

Nos, folytassuk a következő lépésekkel, és tegyük fel a kérdést a bonyolultabb feltételekről. Mi van, ha nem egy, hanem több feltételt kell ellenőrizni? Például, ha a szükséges felhasználót megtaláltuk, egy üzenetet kell megjeleníteni, ha egy másik feltétel is teljesül — egy másik üzenet, és így tovább. Ilyen helyzetben segítenek nekünk a beágyazott feltételek. Így néz ki:

if parancs1
then
parancsok
elif parancs2
then
parancsok
fi

Ha az első parancs nullát ad vissza, ami a sikeres végrehajtására utal, az első blokk parancsai fognak végrehajtódni. then, különben, ha az első feltétel hamis lesz, és ha a második parancs nullát ad vissza, a második kódblokk fog végrehajtódni.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

Egy hasonló scriptben például új felhasználót hozhatunk létre a parancs segítségével useradd, ha a keresés nem adott eredményt, vagy tehetünk valami egyéb hasznosat.

Számok összehasonlítása

A scriptekben összehasonlíthatók a numerikus értékek. Az alábbiakban a megfelelő parancsok listáját találja.

n1 -eq n2Igaz értéket ad vissza, ha n1 egyenlő n2.
n1 -ge n2 Igaz értéket ad vissza, ha n1nagyobb vagy egyenlő n2.
n1 -gt n2Igaz értéket ad vissza, ha n1 nagyobb n2.
n1 -le n2Igaz értéket ad vissza, ha n1kisebb vagy egyenlő n2.
n1 -lt n2Igaz értéket ad vissza, ha n1 kisebb n2.
n1 -ne n2Igaz értéket ad vissza, ha n1nem egyenlő n2.

Példaként próbáljuk ki az egyik összehasonlító operátort. Figyeljen arra, hogy a kifejezés négyzetes zárójelek közé van zárva.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Ez a parancs kimenete.

Bash-skriptek: kezdet
A számok összehasonlítása a scriptekben

A változó értéke val1nagyobb, mint 5, ezért a megfelelő üzenet kerül a konzolra. thenaz összehasonlító operátor ágában.

Szövegek összehasonlítása

A szkriptekben szöveges értékek is összehasonlíthatók. Az összehasonlító operátorok viszonylag egyszerűek, azonban a szöveges összehasonlításoknak vannak bizonyos sajátosságai, amelyekre később kitérünk. Íme az operátorok listája.

str1 = str2 Összehasonlítja a szövegeket egyenlőség szempontjából, igazat ad vissza, ha a szövegek azonosak.
str1 != str2Igazat ad vissza, ha a szövegek nem azonosak.
str1 < str2Igazat ad vissza, ha str1kisebb, mint str2.
str1 > str2 Igazat ad vissza, ha str1nagyobb, mint str2.
-n str1 Igazat ad vissza, ha a hossza str1nagyobb, mint nulla.
-z str1Igazat ad vissza, ha a hossza str1nullával egyenlő.

Íme egy példa a szövegek összehasonlítására a szkriptben:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

A script végrehajtásának eredményeként a következőt kapjuk.

Bash-skriptek: kezdet
Szövegek összehasonlítása a scriptekben

Itt van egy sor összehasonlításának egy jellemzője, amelyről érdemes beszélni. Nevezetesen, a „>” és „” jelet kimeneti átirányítási parancsként értelmezi.

Itt van, hogyan néz ki ezekkel az operátorokkal való munka kódban:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Itt vannak a szkript eredményei.

Bash-skriptek: kezdet
Számsor összehasonlítva, figyelmeztetés megjelenítve

Vegye figyelembe, hogy a szkript, bár végrehajtódik, figyelmeztetést ad:

./myscript: 5. sor: [: túl sok argumentum

Annak érdekében, hogy megszabaduljunk ettől a figyelmeztetéstől, zárjuk $val2 dupla idézőjelek közé:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Most már minden úgy működik, ahogy kell.

Bash-skriptek: kezdet
Szövegek összehasonlítása

A „>” és „<” operátoroknak van egy másik jellemzője is, hogy hogyan működnek a nagy- és kisbetűkkel. Ennek megértéséhez készítsünk egy szöveges fájlt a következő tartalommal:

Likegeeks
likegeeks

Mentjük el, a nevét megadva myfile, majd a terminálban hajtsunk végre egy ilyen parancsot:

sort myfile

Ez a fájlban található sorokat az alábbiak szerint fogja rendezni:

likegeeks
Likegeeks

A parancs sort, alapértelmezés szerint a sorokat növekvő sorrendbe rendezi, tehát a kisbetűs betű a mi példánkban kisebb, mint a nagybetűs. Most készítsünk egy szkriptet, amely összehasonlítja ezeket a sorokat:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ha futtatjuk, kiderül, hogy éppen fordítva van – a kisbetűs betű most nagyobb, mint a nagybetűs.

Bash-skriptek: kezdet
A sort parancs és a sorok összehasonlítása a szkript fájlban

Az összehasonlító parancsokban a nagybetűk kisebbek, mint a kisbetűk. Az összehasonlítás itt az ASCII karakterek kódjaival történik, így a rendezési sorrend a karakterek kódjától függ.

A parancs sort, a maga részéről, az aktuális nyelvi beállításokban meghatározott rendezési sorrendet használja.

Fájlok ellenőrzése

Valószínűleg az alábbi parancsokat a bash-szkriptekben a leggyakrabban használják. Ezek lehetővé teszik különböző fájlra vonatkozó feltételek ellenőrzését. Itt található ezeknek a parancsoknak a listája.

-d fájlEllenőrzi, hogy a fájl létezik-e és könyvtár-e.
-e fájlEllenőrzi, hogy a fájl létezik-e.
-f fájl Ellenőrzi, hogy a fájl létezik-e és fájl-e.
-r fájlEllenőrzi, hogy a fájl létezik-e és olvasható-e.
-s fájlEllenőrzi, hogy a fájl létezik-e és nem üres.
-w fájlEllenőrzi, hogy a fájl létezik-e és írható-e.
-x fájlEllenőrzi, hogy a fájl létezik-e és végrehajtható-e.
file1 -nt file2 Ellenőrzi, hogy újabb-e file1, mint file2.
file1 -ot file2Ellenőrzi, hogy régebbi-e file1, mint file2.
-O file Ellenőrzi, hogy létezik-e a fájl, és hogy a jelenlegi felhasználó-e a tulajdonosa.
-G fileEllenőrzi, hogy létezik-e a fájl, és hogy a csoportazonosítója megegyezik a jelenlegi felhasználó csoportazonosítójával.

Ezek a parancsok, mint ahogy sok másik is, amit ma átbeszéltünk, könnyen megjegyezhetők. Neveik, amelyek a különböző szavak rövidítései, közvetlenül utalnak az általuk végzett ellenőrzésekre.

Próbáljunk ki egy parancsot a gyakorlatban:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Ez a szkript a létező könyvtár tartalmát fogja kiírni.

Bash-skriptek: kezdet
A könyvtár tartalmának kiírása

Feltételezzük, hogy a többi parancsot önállóan is ki tudja próbálni, mindegyikük ugyanazzal az elvvel működik.

Összegzés

Ma arról beszéltünk, hogyan kezdjük el a bash-szkriptek írását, és áttekintettük néhány alapvető dolgot. A bash-programozás témája valójában hatalmas. Ez a cikk a nagy, 11 anyagból álló sorozat első részének fordítása. Ha szeretné, hogy azonnal folytassuk, itt van az eredeti anyagok listája. A kényelem kedvéért ide került az a cikk is, amelynek fordítását éppen olvasta.

  1. Bash Script Lépésről Lépésre — itt arról van szó, hogyan kezdjük el a bash-szkriptek írását, a változók használatának áttekintése, a feltételes szerkezetek, a számok és szövegek összehasonlítása, valamint a fájlokkal kapcsolatos információk megismerése.
  2. Bash Scripting 2. rész, Bash, a nagyszerű — itt a for és while ciklusok működését tárgyaljuk.
  3. Bash Scripting 3. rész, Paraméterek és opciók — ez az anyag a parancssori paraméterekről és azokról a kulcsokról szól, amelyeket a szkripteknek át lehet adni, a felhasználó által bevitt adatok kezeléséről és a fájlokból olvasott információkról.
  4. Bash Scripting 4. rész, Bemenet és Kimenet — itt a fájldeszkiptorokról és azok használatáról van szó, a bemeneti, kimeneti és hibafolyamokról, valamint a kimenet átirányításáról.
  5. Bash Scripting 5. rész, Jelek és Feladatok — ez az anyag a Linux jeleivel foglalkozik, azok feldolgozásával a szkriptekben, valamint a szkriptek ütemezett futtatásával.
  6. Bash Scripting 6. rész, Függvények — itt megtudhatja, hogyan kell függvényeket létrehozni és használni a szkriptekben, valamint könyvtárakat fejleszteni.
  7. Bash Scripting 7. rész, sed használata — ez a cikk a sed folyó szövegszerkesztő használatával foglalkozik.
  8. Bash Scripting 8. rész, awk használata — ez az anyag a dátummal dolgozó awk programozásról szól.
  9. Bash Scripting 9. rész, Reguláris Kifejezések — itt olvashat arról, hogyan használhatók a reguláris kifejezések bash-scriptekben.
  10. Bash Scripting 10. rész, Gyakorlati példák — itt olyan módszerek találhatók, amelyeket üzenetek küldésére alkalmazhatunk felhasználóknak, valamint a lemezmonitorozás módszere.
  11. Bash Scripting 11. rész, Expect parancs — Ez az anyag az Expect eszközről szól, amely lehetővé teszi interaktív programokkal való automatizált interakciót. Különösen az expect-scriptek és azok bash-scriptekkel, valamint más programokkal való együttműködéséről lesz szó.

Úgy gondoljuk, hogy ennek a cikksorozatnak az egyik értékes tulajdonsága, hogy a legegyszerűbb, bármilyen szintű felhasználók számára megfelelő tartalomról indulva fokozatosan vezet a komolyabb témákhoz, lehetőséget adva mindenkinek a Linux parancssoros scriptek fejlesztésében való előrelépésre.

Kedves olvasók! Kérjük a bash-programozás guruait, hogy meséljenek arról, hogyan érték el a mesterség csúcsait, osszák meg titkaikat, és várjuk azoktól is, akik most írták meg első scriptjüket, hogy mit tapasztaltak.

Bash-skriptek: kezdet

Csak a regisztrált felhasználók vehetnek részt a szavazáson. Kérem, jelentkezzen be., kérem.

Fordítsuk le a cikkek ciklusának további részeit?

  • Igen!

  • Nem, nem szükséges

1030 felhasználó szavazott. 106 felhasználó tartózkodott.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster