Bash skripty: začiatok

Bash skripty: začiatok
Bash skripty Časť 2: Slučky
Bash Scripts, Časť 3: Možnosti a prepínače príkazového riadku
Bash skripty Časť 4: Vstup a výstup
Bash skripty, časť 5: Signály, úlohy na pozadí, správa skriptov
Bash Scripts, Časť 6: Funkcie a vývoj knižníc
Bash skripty, časť 7: sed a spracovanie textu
Bash skripty, časť 8: awk jazyk spracovania údajov
Bash skripty, časť 9: Regulárne výrazy
Bash skripty Časť 10: Praktické príklady
Bash skripty, časť 11: očakávanie a automatizácia interaktívnych nástrojov

Dnes si povieme niečo o bash skriptoch. toto - skripty príkazového riadku, napísaný pre bash shell. Existujú aj iné shelly ako zsh, tcsh, ksh, ale my sa zameriame na bash. Tento materiál je určený pre každého, jedinou podmienkou je schopnosť pracovať príkazový riadok Linux.

Bash skripty: začiatok

Skripty príkazového riadka sú kolekciou rovnakých príkazov, ktoré možno zadávať z klávesnice, zhromažďovať do súborov a spájať na nejaký spoločný účel. V tomto prípade môžu mať výsledky práce tímov buď nezávislú hodnotu, alebo môžu slúžiť ako vstupné údaje pre iné tímy. Skripty predstavujú účinný spôsob automatizácie často vykonávaných akcií.

Bash skripty: začiatok

Ak teda hovoríme o príkazovom riadku, umožňuje vám vykonať niekoľko príkazov naraz tak, že ich zadáte oddelené bodkočiarkou:

pwd ; whoami

V skutočnosti, ak ste to vyskúšali vo svojom termináli, váš prvý bash skript obsahujúci dva príkazy už bol napísaný. Funguje to takto. Najprv tím pwd zobrazí informácie o aktuálnom pracovnom adresári, potom príkaz whoamizobrazuje informácie o používateľovi, ako ste prihlásený.

Pomocou tohto prístupu môžete na jednom riadku kombinovať toľko príkazov, koľko chcete, jediným obmedzením je maximálny počet argumentov, ktoré je možné odovzdať programu. Tento limit môžete definovať pomocou nasledujúceho príkazu:

getconf ARG_MAX

Príkazový riadok je skvelý nástroj, ale príkazy doň musíte zadávať vždy, keď ich potrebujete. Čo keby sme napísali súbor príkazov do súboru a jednoducho zavolali tento súbor, aby sme ich vykonali? V skutočnosti sa súbor, o ktorom hovoríme, nazýva skript príkazového riadka.

Ako fungujú bash skripty

Vytvorte prázdny súbor pomocou príkazu touch. Jeho prvý riadok musí naznačovať, ktorý shell budeme používať. Máme záujem o bash, takže prvý riadok súboru bude:

#!/bin/bash

Ostatné riadky v tomto súbore používajú symbol hash na označenie komentárov, ktoré shell nespracuje. Prvý riadok je však špeciálny prípad, je tam krížik, za ktorým nasleduje výkričník (táto postupnosť je tzv. šebang) a cestu k nemu bash, označte systém, pre ktorý bol skript vytvorený špeciálne bash.

Príkazy shellu sú oddelené riadkom, komentáre sú oddelené znakom hash. Takto to vyzerá:

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

Tu, rovnako ako na príkazovom riadku, môžete písať príkazy na jeden riadok oddelené bodkočiarkou. Ak však príkazy napíšete na rôzne riadky, súbor sa bude ľahšie čítať. V každom prípade ich škrupina spracuje.

Nastavenie povolení súboru skriptu

Uložte súbor a pomenujte ho myscripta práca na vytvorení bash skriptu je takmer dokončená. Teraz už zostáva len urobiť tento súbor spustiteľným, inak, ak sa ho pokúsite spustiť, narazíte na chybu Permission denied.

Bash skripty: začiatok
Pokus o spustenie súboru skriptu s nesprávne nakonfigurovanými povoleniami

Urobme súbor spustiteľným:

chmod +x ./myscript

Teraz to skúsme vykonať:

./myscript

Po nastavení oprávnení všetko funguje ako má.

Bash skripty: začiatok
Úspešne spustený bash skript

Výstup správy

Na výstup textu do konzoly Linux použite príkaz echo. Využime znalosť tejto skutočnosti a upravme náš skript pridaním vysvetlení k údajom, ktoré sú výstupom príkazov, ktoré už v ňom sú:

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

Toto sa stane po spustení aktualizovaného skriptu.

Bash skripty: začiatok
Výstup správ zo skriptu

Teraz môžeme pomocou príkazu zobraziť vysvetľujúce poznámky echo. Ak neviete, ako upraviť súbor pomocou nástrojov Linuxu, alebo ste príkaz ešte nevideli echo, pozri sa na toto Materiál.

Používanie premenných

Premenné vám umožňujú ukladať informácie do súboru skriptu, napríklad výsledky príkazov, na použitie inými príkazmi.

Nie je nič zlé na vykonávaní jednotlivých príkazov bez uloženia ich výsledkov, no tento prístup je dosť obmedzený vo svojich možnostiach.

Existujú dva typy premenných, ktoré možno použiť v bash skriptoch:

  • Premenné prostredia
  • Používateľské premenné

Premenné prostredia

Niekedy príkazy shellu potrebujú pracovať s niektorými systémovými údajmi. Tu je príklad, ako zobraziť domovský adresár aktuálneho používateľa:

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

Upozorňujeme, že môžeme použiť systémovú premennú $HOME v úvodzovkách to nezabráni systému, aby ho rozpoznal. To je to, čo získate, ak spustíte vyššie uvedený scenár.

Bash skripty: začiatok
Použitie premennej prostredia v skripte

Čo ak potrebujete na obrazovke zobraziť znak dolára? Skúsme toto:

echo "I have $1 in my pocket"

Systém zistí znak dolára v reťazci v úvodzovkách a predpokladá, že sme odkazovali na premennú. Skript sa pokúsi zobraziť hodnotu nedefinovanej premennej $1. Toto nie je to, čo potrebujeme. Čo robiť?

V tejto situácii pomôže použitie znaku escape, spätnej lomky pred znakom dolára:

echo "I have $1 in my pocket"

Skript teraz vypíše presne to, čo sa očakáva.

Bash skripty: začiatok
Použitie escape sekvencie na vytlačenie znaku dolára

Používateľské premenné

Okrem premenných prostredia vám bash skripty umožňujú definovať a používať vlastné premenné v skripte. Takéto premenné majú hodnotu, kým skript nedokončí vykonanie.

Rovnako ako v prípade systémových premenných, aj k užívateľským premenným je možné pristupovať pomocou znaku dolára:
TNW-CUS-FMP - propagačný kód na 10% zľavu na naše služby, k dispozícii na aktiváciu do 7 dní

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

To sa stane po spustení takéhoto skriptu.

Bash skripty: začiatok
Vlastné premenné v skripte

Náhrada príkazov

Jednou z najužitočnejších funkcií bash skriptov je schopnosť extrahovať informácie z výstupu príkazu a priradiť ich k premenným, čo vám umožňuje použiť tieto informácie kdekoľvek v súbore skriptu.

Existujú dva spôsoby, ako to urobiť.

  • Použitie spätného začiarknutia "`"
  • Dizajnovo $()

Pri použití prvého prístupu dávajte pozor, aby ste namiesto zadného začiarknutia nezahrnuli úvodzovky. Príkaz musí byť uzavretý v dvoch takýchto ikonách:

mydir=`pwd`

V druhom prístupe je to isté napísané takto:

mydir=$(pwd)

A scenár môže nakoniec vyzerať takto:

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

Počas jeho činnosti je výstup príkazu pwdsa uloží do premennej mydir, ktorého obsah pomocou príkazu echo, prejde do konzoly.

Bash skripty: začiatok
Skript, ktorý ukladá výsledky príkazu do premennej

Matematické operácie

Na vykonávanie matematických operácií v súbore skriptu môžete použiť konštrukciu ako $((a+b)):

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

Bash skripty: začiatok
Matematické operácie v skripte

ak-tak kontrolný konštrukt

V niektorých scenároch musíte riadiť tok vykonávania príkazov. Napríklad, ak je určitá hodnota väčšia ako päť, musíte vykonať jednu akciu, v opačnom prípade inú. To je použiteľné v mnohých situáciách a tu nám pomôže štruktúra ovládania if-then. Vo svojej najjednoduchšej forme to vyzerá takto:

if команда
then
команды
fi

Tu je pracovný príklad:

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

V tomto prípade, ak je príkaz vykonaný pwdsa úspešne dokončí, na konzole sa zobrazí text „to funguje“.

Využime vedomosti, ktoré máme a napíšme zložitejší scenár. Povedzme, že potrebujeme nájsť určitého používateľa /etc/passwda ak sa vám ho podarilo nájsť, nahláste, že existuje.

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

Toto sa stane po spustení tohto skriptu.

Bash skripty: začiatok
Vyhľadávanie používateľov

Tu sme použili príkaz grepna vyhľadanie používateľa v súbore /etc/passwd. Ak tým grepneznámy, jeho popis nájdete tu.

V tomto príklade, ak je používateľ nájdený, skript zobrazí zodpovedajúcu správu. Čo ak sa používateľ nepodarilo nájsť? V tomto prípade skript jednoducho dokončí vykonanie bez toho, aby nám čokoľvek povedal. Boli by sme radi, keby nám o tom povedal aj on, takže kód vylepšíme.

if-then-others control konštrukt

Aby program mohol hlásiť výsledky úspešného hľadania aj zlyhania, použijeme konštrukciu if-then-else. Funguje to takto:

if команда
then
команды
else
команды
fi

Ak prvý príkaz vráti nulu, čo znamená, že bol vykonaný úspešne, podmienka bude pravdivá a vykonávanie nebude pokračovať pozdĺž vetvy else. V opačnom prípade, ak sa vráti niečo iné ako nula, čo by znamenalo zlyhanie alebo nesprávny výsledok, príkazy za else.

Napíšeme nasledujúci skript:

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

Jeho poprava išla dolu vodou else.

Bash skripty: začiatok
Spustenie skriptu s konštrukciou if-then-else

No poďme ďalej a položme si otázku o zložitejších podmienkach. Čo ak potrebujete skontrolovať nie jednu podmienku, ale niekoľko? Napríklad, ak sa nájde požadovaný používateľ, mala by sa zobraziť jedna správa, ak je splnená nejaká iná podmienka, mala by sa zobraziť ďalšia správa atď. V takejto situácii nám pomôžu vnorené podmienky. Vyzerá to takto:

if команда1
then
команды
elif команда2
then
команды
fi

Ak prvý príkaz vráti nulu, čo znamená jeho úspešné vykonanie, vykonajú sa príkazy v prvom bloku then, v opačnom prípade, ak je prvá podmienka nepravdivá a ak druhý príkaz vráti nulu, vykoná sa druhý blok kódu.

#!/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

V takomto skripte môžete napríklad pomocou príkazu vytvoriť nového používateľa useradd, ak vyhľadávanie neprinieslo výsledky, alebo urobte niečo iné užitočné.

Porovnanie čísel

V skriptoch môžete porovnávať číselné hodnoty. Nižšie je uvedený zoznam relevantných príkazov.

n1 -eq n2Vráti hodnotu true if n1 je n2.
n1 -ge n2 Vráti hodnotu true if n1väčšie alebo rovnaké n2.
n1 -gt n2Vráti hodnotu true if n1 viac ako n2.
n1 -le n2Vráti hodnotu true if n1menšie alebo rovnaké n2.
n1 -lt n2Vráti hodnotu true, ak je n1 menšie ako n2.
n1 -ne n2Vráti hodnotu true if n1nie sú si rovní n2.

Ako príklad skúsme jeden z porovnávacích operátorov. Všimnite si, že výraz je uzavretý v hranatých zátvorkách.

#!/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

Toto je výstup tohto príkazu.

Bash skripty: začiatok
Porovnanie čísel v skriptách

Variabilná hodnota val1väčšia ako 5, vetva skončí vykonaním thenoperátor porovnávania a na konzole sa zobrazí príslušná správa.

Porovnanie reťazcov

Skripty môžu tiež porovnávať hodnoty reťazcov. Porovnávacie operátory vyzerajú celkom jednoducho, ale operácie porovnávania reťazcov majú určité funkcie, ktorých sa dotkneme nižšie. Tu je zoznam operátorov.

str1 = str2 Testuje reťazce z hľadiska rovnosti a vráti hodnotu true, ak sú reťazce identické.
str1 != str2Ak reťazce nie sú identické, vráti hodnotu true.
str1 < str2Vráti hodnotu true if str1menej ako str2.
str1 > str2 Vráti hodnotu true if str1viac ako str2.
-n str1 Vráti hodnotu true if length str1Nad nulou.
-z str1Vráti hodnotu true if length str1rovná nule.

Tu je príklad porovnania reťazcov v skripte:

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

V dôsledku vykonania skriptu dostaneme nasledovné.

Bash skripty: začiatok
Porovnávanie reťazcov v skriptoch

Tu je jedna funkcia porovnávania reťazcov, ktorá stojí za zmienku. Konkrétne, operátory ">" a "<" musia byť označené spätnou lomkou, inak skript nebude fungovať správne, aj keď sa nezobrazia žiadne chybové hlásenia. Skript interpretuje znak ">" ako príkaz na presmerovanie výstupu.

Takto vyzerá práca s týmito operátormi v kóde:

#!/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

Tu sú výsledky skriptu.

Bash skripty: začiatok
Porovnanie reťazcov, upozornenie

Upozorňujeme, že skript, aj keď je spustený, vydáva varovanie:

./myscript: line 5: [: too many arguments

Aby sme sa zbavili tohto varovania, uzatvárame $val2 v dvojitých úvodzovkách:

#!/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

Teraz všetko funguje ako má.

Bash skripty: začiatok
Porovnanie reťazcov

Ďalšou vlastnosťou operátorov ">" a "<" je spôsob, akým pracujú s veľkými a malými písmenami. Aby sme porozumeli tejto funkcii, pripravme si textový súbor s nasledujúcim obsahom:

Likegeeks
likegeeks

Zachráňme to tak, že mu dáme meno myfilea potom v termináli spustite nasledujúci príkaz:

sort myfile

Zoradí riadky zo súboru takto:

likegeeks
Likegeeks

Tím sort, štandardne zoraďuje reťazce vzostupne, to znamená, že malé písmeno v našom príklade je menšie ako veľké. Teraz pripravme skript, ktorý bude porovnávať rovnaké reťazce:

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

Ak ho spustíte, ukáže sa, že všetko je naopak – malé písmeno je teraz väčšie ako veľké.

Bash skripty: začiatok
Príkaz sort a porovnávanie reťazcov v súbore skriptu

V porovnávacích príkazoch sú veľké písmená menšie ako malé písmená. Porovnanie reťazcov sa tu robí porovnaním ASCII kódov znakov, poradie triedenia teda závisí od kódov znakov.

Tím sort, zase používa poradie zoradenia určené v nastaveniach jazyka systému.

Kontroly súborov

Možno sa najčastejšie používajú nasledujúce príkazy v bash skriptoch. Umožňujú vám skontrolovať rôzne podmienky týkajúce sa súborov. Tu je zoznam týchto príkazov.

-d fileSkontroluje, či súbor existuje a či ide o adresár.
-e fileSkontroluje, či súbor existuje.
-f file Skontroluje, či súbor existuje a či je súborom.
-r fileSkontroluje, či súbor existuje a či je čitateľný.
-s file ПSkontroluje, či súbor existuje a nie je prázdny.
-w fileSkontroluje, či súbor existuje a je zapisovateľný.
-x fileSkontroluje, či súbor existuje a či je spustiteľný.
file1 -nt file2 Skontroluje, či je novší file1než file2.
file1 -ot file2Skontroluje, či je starší file1než file2.
-O file Skontroluje, či súbor existuje a či je vlastnený aktuálnym používateľom.
-G fileSkontroluje, či súbor existuje a či sa jeho ID skupiny zhoduje s ID skupiny aktuálneho používateľa.

Tieto príkazy, ako aj mnohé iné, o ktorých sa dnes diskutuje, sú ľahko zapamätateľné. Ich mená, ktoré sú skratkami rôznych slov, priamo označujú kontroly, ktoré vykonávajú.

Vyskúšame si jeden z príkazov v praxi:

#!/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

Tento skript pre existujúci adresár zobrazí jeho obsah.

Bash skripty: začiatok
Výpis obsahu adresára

Veríme, že s ostatnými príkazmi môžete experimentovať sami, všetky sa používajú podľa rovnakého princípu.

Výsledky

Dnes sme hovorili o tom, ako začať písať bash skripty a pokryli sme niektoré základné veci. V skutočnosti je téma programovania bash obrovská. Tento článok je prekladom prvej časti veľkej série 11 materiálov. Ak chcete pokračovať hneď teraz, tu je zoznam originálov týchto materiálov. Pre pohodlie je tu uvedený preklad, ktorý ste si práve prečítali.

  1. Bash Script krok za krokom — tu hovoríme o tom, ako začať vytvárať bash skripty, uvažuje sa o použití premenných, popísané sú podmienené štruktúry, výpočty, porovnávanie čísel, reťazcov a zisťovanie informácií o súboroch.
  2. Bash Scripting Časť 2, Bash úžasné — tu sú odhalené funkcie práce so slučkami for a while.
  3. Bash Scripting Časť 3, Parametre a možnosti — tento materiál je venovaný parametrom príkazového riadka a kľúčom, ktoré je možné odovzdať skriptom, pracujúcim s údajmi, ktoré zadáva používateľ a ktoré možno čítať zo súborov.
  4. Bash Scripting Časť 4, Vstup a výstup - tu hovoríme o deskriptoroch súborov a práci s nimi, o vstupe, výstupe, chybových tokoch a o presmerovaní výstupu.
  5. Bash Scripting časť 5, Sighals & Jobs — tento materiál je venovaný signálom Linuxu, ich spracovaniu v skriptoch a spúšťaniu skriptov podľa plánu.
  6. Bash Scripting Časť 6, Funkcie — tu sa dozviete o vytváraní a používaní funkcií v skriptoch a vývoji knižníc.
  7. Bash Scripting Časť 7, Používanie sed — tento článok je venovaný práci s textovým editorom sed streaming.
  8. Bash Scripting Časť 8, Použitie awk — tento materiál je venovaný programovaniu v jazyku na spracovanie údajov awk.
  9. Bash Scripting Časť 9, Regulárne výrazy — tu si môžete prečítať o používaní regulárnych výrazov v bash skriptoch.
  10. Bash Scripting Časť 10, Praktické príklady — tu sú techniky na prácu so správami, ktoré je možné posielať používateľom, ako aj spôsob monitorovania disku.
  11. Bash Scripting Časť 11, Očakávaný príkaz — tento materiál je venovaný nástroju Expect, pomocou ktorého môžete automatizovať interakciu s interaktívnymi pomôckami. Hovoríme najmä o očakávaných skriptoch a ich interakcii s bash skriptami a inými programami.

Veríme, že jednou z cenných vlastností tejto série článkov je, že počnúc od najjednoduchších, vhodných pre používateľov akejkoľvek úrovne, postupne vedie k celkom vážnym témam, vďaka čomu má každý šancu napredovať vo vytváraní skriptov príkazového riadku pre Linux. .

Vážení čitatelia! Žiadame guru programovania bash, aby hovorili o tom, ako dosiahli vrchol svojho majstrovstva, zdieľali svoje tajomstvá a tešíme sa na dojmy od tých, ktorí práve napísali svoj prvý scenár.

Bash skripty: začiatok

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Mám preložiť zvyšok série článkov?

  • Áno!

  • Nie, netreba

Hlasovalo 1030 užívateľov. 106 užívateľov sa zdržalo hlasovania.

Zdroj: hab.com

Pridať komentár