Programmeren in bash - deel 1

Hoewel we het over het algemeen gebruiken voor administratieve of bestandsbeheerbewerkingen, is de comfort de Linux breidt zijn functionaliteit veel verder uit dan dat doel, waardoor we kunnen programmeren scripts Deze gids is niet bedoeld als een complete referentie over Bash-programmering, maar eerder als een inleiding tot de basiscommando's en -structuren, waarmee we de kracht van ons GNU / Linux-systeem kunnen uitbreiden.

Wat is een "script"?

In feite zeggen we dat het een bestand is dat code bevat geschreven in een bepaalde programmeertaal die het systeem gebruikt voor een bepaalde taak. Het hoeft geen externe invoer of grafische interface te hebben, maar het moet wel een uitvoer van verwerkte gegevens veroorzaken (zelfs als de gebruiker het niet ziet).

De taal die door Bash wordt gebruikt, wordt gedefinieerd door zijn eigen interpreter en combineert de syntaxis van andere Shells, zoals de Korn Shell (ksh) of de C Shell (csh). Veel van de opdrachten die gewoonlijk in de console worden gebruikt, kunnen ook in scripts worden gebruikt, behalve die welke strikt betrekking hebben op een bepaalde distributie.

Structuur van een script

Om te beginnen hebben we een teksteditor nodig en de wens om te programmeren. De bestanden die we opslaan met een .sh-extensie kunnen worden uitgevoerd (of geïnterpreteerd) door de console, zolang de eerste regel de volgende is:

#! / Bin / bash

Dit vertelt het systeem om de console te gebruiken om het bestand uit te voeren. Bovendien kunt u met het teken # opmerkingen schrijven. Om het eenvoudigste voorbeeld te maken, voegen we nog een regel toe, te zien in de volgende afbeelding:

De echo-opdracht geeft een bericht op het scherm weer, in dit geval de typische "Hallo wereld!" Als we het opslaan en uitvoeren met de console, zullen we het resultaat zien.

Basisopdrachten

De volgende opdrachten zijn gebruikelijk en erg handig voor elk type programma. We verduidelijken dat er nog veel meer zijn, maar voorlopig behandelen we het volgende.

Aliassen: hiermee kan een reeks woorden worden vervangen door een kortere, waardoor code wordt gereduceerd.

#We maken een alias genaamd per met het adres van de map #Downloads alias per = '/ home / user / Downloads' #Elke keer dat we het willen gebruiken, hoeven we alleen #het nieuwe woord per # aan te roepen Om die alias te vernietigen, we gebruiken unalias unalias per

break: hiermee kunt u onmiddellijk een for, while, tot of een lus selecteren (we zullen de loops later in detail bestuderen)

#Maak een lus die de nummers van 1 tot 5 toewijst #voor elke "draai van de lus" voor teller in 1 2 3 4 5 do #We printen de huidige waarde van de variabele #counter, die wordt geanalyseerd door het teken $ echo "$ counter" #Als de tellerwaarde gelijk is aan 3 if [$ counter –eq 3] dan #De pauze verlaat de lus voor pauze fi done

continue - Gelijk aan break, behalve dat het de huidige lus negeert en naar de volgende gaat.

#Maak een lus die de nummers van 1 tot 5 toewijst #voor elke "draai van de lus" voor teller in 1 2 3 4 5 do #Als de tellerwaarde gelijk is aan 3 if [$ counter –eq 3] dan # Doorgaan voorkomt dat de rest van de huidige # cyclus wordt geanalyseerd door naar de volgende ronde te springen, dat wil zeggen dat #waarde 3 niet wordt afgedrukt. ga verder met fi echo "$ counter" gedaan

declareren: declareert variabelen en kent ze waarden toe, net als typeset (ze werken op dezelfde manier). We kunnen het combineren met enkele opties: -i declareert gehele getallen; -r voor alleen-lezen variabelen, waarvan de waarde niet kan worden gewijzigd; –A voor matrices of "arrays"; -f voor functies; -x voor variabelen die kunnen worden "geëxporteerd" buiten de omgeving van het script zelf.

declareren –i num = 12 declareren –x pi = 3.14

help: toont hulp voor een specifiek commando.

jobs: toont de lopende processen.

# Met –c tonen we de naam van de commando's, met –p # de pid (proces-id) van elk proces. banen -cp

let: evalueer een rekenkundige uitdrukking

laat a = 11 laat a = a + 5 # Ten slotte drukken we de waarde af van a die 16 is echo "11 + 5 = $ a"

local: maak lokale variabelen aan, die bij voorkeur in functies van het script zelf moeten worden gebruikt om fouten te voorkomen. U kunt dezelfde functies gebruiken als de opdracht declareren.

local v1 = "Dit is een lokale variabele"

logout: maakt het mogelijk om volledig uit te loggen bij een Shell; handig voor gevallen waarin we met meer dan één Shell-venster werken, waarbij het exit-commando slechts één venster tegelijk laat beëindigen.

printf: hiermee kunt u gegevens afdrukken en formatteren. Het heeft veel opties, dus we zullen er een paar noemen.

#% f wordt afgedrukt als een zwevend getal, n voor nieuwe # regel printf "% fn" 5 5.000000 # & d laat toe om decimale getallen door te geven als argumenten printf "Er zijn% d orders gewaardeerd in% d dollars.n" 20 Er zijn 500 bestellingen ter waarde van 20 dollar.

lezen: lees een regel van de standaardinvoer (module die bijvoorbeeld wordt gebruikt om gegevens via het toetsenbord te laden). We kunnen opties doorgeven zoals: -t om een ​​leeslimiet te geven; -a zodat elk woord wordt toegewezen aan een positie in de aname-array; -d om een ​​scheidingsteken te gebruiken dat aan het einde van de regel moet worden geschreven; onder andere.

echo "Voer uw naam in en druk op ENTER" #Lees de naam van de variabele lees naam echo "Uw naam is $ naam"

type: beschrijft een commando en zijn gedrag. Het kan handig zijn om de gegevensdefinities voor elk commando te achterhalen.

type –a '[' #type vertelt ons dat [een in de Shell ingebouwd commando is [een in de Shell ingebouwd commando is # -a het mogelijk maakt om de mappen te vinden die # een uitvoerbaar bestand met de ingevoerde naam bevatten. [is / usr / bin / [

ulimit: beperkt de toegang tot en het gebruik van bepaalde systeembronnen tot processen, ideaal voor programma's die administratieve wijzigingen toestaan ​​of die gericht zijn op verschillende soorten gebruikers. Bij het instellen van een limiet schrijven we een getal dat de kilobytes van de limiet vertegenwoordigt.

#We zien onze huidige limieten ulimit –a # -f staat het beperken van gebruikers toe om # bestanden groter dan 512000 Kb (500 #Mb) niet te maken. Ulimit –f 512000 # -v beperkt het virtuele geheugen van het proces. ulimit –v 512000

wacht: wacht tot een bepaald proces of bepaalde taak wordt uitgevoerd om verder te gaan.

#Het script wacht tot het proces van pid # 2585 wordt uitgevoerd

wacht 2585

Andere nuttige opdrachten die we aan scripts kunnen toevoegen, worden weergegeven door symbolen.

!!: voer het laatste commando opnieuw uit

! wer: voert het laatste commando uit dat begon met de uitdrukking “wer”.

'==', '! =', '>', '<', '> =', en '<=': relationele operatoren.

|: De OR-operator die doorgaans wordt gebruikt om twee reguliere expressies samen te voegen.

: escape-opdracht waarmee u uitdrukkingen kunt opmaken. Bijvoorbeeld: a voor een geluidswaarschuwing, n voor een nieuwe regel, b voor backspace, enz.

Bedankt Juan Carlos Ortiz!

10 reacties, laat de jouwe achter

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Gemiddeld moeilijk zei

    Super goed! Hoe dan ook 2 opmerkingen: de Ubuntu-tag is half te veel, omdat het iets generieks genereert. En als deze tutorials zich blijven ontwikkelen, zou het goed zijn als ze aan elkaar gekoppeld worden….
    Anders dan dat, is deze zet interessant!

  2.   Laten we Linux gebruiken zei

    Goede bijdrage! Super goed!

  3.   Giovanni escobar sosa zei

    Alleen ontbrekende referenties voor degenen die meer in de kwestie willen komen. Enkele goede, hoewel niet zo gemakkelijk te vinden in onze landen, zijn dat wel
    - Een praktische gids voor Linux-opdrachten, editors en shell-programmering, Mark Sobell (hoofdstuk 8)
    - Pro Bash Programming, Chris FA Johnson (hoewel dit voor degenen is die andere referenties hebben of een beetje meer kennis).

    Goed artikel

  4.   Laten we Linux gebruiken zei

    Goede date! Dank je!

  5.   Patricio Dorantes Jamarne zei

    : @ De functie "inloggen als" heeft mijn vorige opmerking verwijderd, dus ik zal het verder samenvatten:
    banen -cp
    bash: jobs: -c: ongeldige optie
    jobs: gebruik: jobs [-lnprs] [jobspec ...] of jobs -x commando [args]

    -eq -gt -lt accepteren geen decimale puntvariabelen, tussen forum en forum ontdekte ik dat bc een goede bondgenoot is:
    als [`echo 9.999> 10 | bc` -eq 1]; vervolgens
    echo "9.999 is groter dan 10, zorg ervoor dat je processor nog werkt"
    anders
    echo «9.999 is niet groter dan 10, alles werkt normaal
    fi

  6.   NietVanBrooklyn zei

    Dit bericht vat alle algemeenheden van bash-scripting goed samen:
    http://www.aboutlinux.info/2005/10/10-seconds-guide-to-bash-shell.html

    Op deze site vind je veel vragen en antwoorden over bash-eigenaardigheden:
    http://unix.stackexchange.com/questions/tagged/bash

    Hier zijn enkele echt coole scripts, en hey, je kunt ze leren door de scripts van anderen te lezen:
    http://snipplr.com/search.php?q=bash&btnsearch=go

  7.   NietVanBrooklyn zei

    Je hebt gelijk met wat je zegt, behalve bash. Elk systeem dat ik heb gezien, heeft bash in / bin / bash.

    Maar voor python, perl, robijn, enz. Is het prima om dat te gebruiken. Ik doe

  8.   Guille zei

    Toevallig gebruiken we op de universiteit bash-scripting, dus de gegevens zijn 10, heel goed!

  9.   alex ik zag zei

    een pdf-versie om te downloaden zou goed zijn !! 😀

  10.   Marco Antonio De Fuentes zei

    Zeer goede site. Ik heb eindelijk iets nuttigs gevonden. Dank je.