Programmering i bash - del 1

Medan vi i allmänhet använder det för administrativa eller filhanteringsåtgärder, komfort de Linux utökar dess funktionalitet långt utöver det syftet, så att vi kan programmera skript enligt våra behov. Denna guide är inte avsedd att vara en fullständig referens om Bash-programmering, utan snarare en introduktion till de grundläggande kommandona och strukturerna, som gör att vi kan utöka kraften i vårt GNU / Linux-system.

Vad är ett "manus"?

I grund och botten säger vi att det är en fil som innehåller kod skriven på ett visst programmeringsspråk som systemet använder för en viss uppgift. Det behöver inte ha en extern ingång eller ett grafiskt gränssnitt, men det måste orsaka en utdata av bearbetade data (även om användaren inte ser det).

Språket som används av Bash definieras av sin egen tolk och kombinerar syntaxen för andra skal, såsom Korn-skalet (ksh) eller C-skalet (csh). Många av de kommandon som vanligtvis används i konsolen kan också användas i skript, förutom de som strikt tillhör en viss distribution.

Skriptets struktur

För att starta måste vi ha en textredigerare och en önskan att programmera. Filerna som vi sparar med en .sh-förlängning kan köras (eller tolkas) av konsolen, så länge den första raden är följande:

#! / Bin / bash

Detta berättar för systemet att använda konsolen för att köra filen. Dessutom kan du med # -tecknet skriva kommentarer. För att skapa det enklaste exemplet lägger vi till en rad till, sett i följande bild:

Ekokommandot visar ett meddelande på skärmen, i detta fall det typiska "Hej världen!" Om vi ​​sparar det och kör det med konsolen ser vi resultatet.

Grundläggande kommandon

Följande kommandon är vanliga och mycket användbara för alla typer av program. Vi klargör att det finns många fler, men för närvarande kommer vi att täcka följande.

Alias: gör att en rad ord kan ersättas med en kortare, vilket möjliggör kodreduktion.

# skapa ett alias som kallas per med adressen till mappen #Downloads alias per = '/ home / user / Downloads' # Varje gång vi vill använda det måste vi bara ringa # det nya ordet per # För att förstöra det alias använder vi unalias unalias per

break: låter dig omedelbart avsluta en for, while, tills eller välj loop (vi kommer att studera loopar i detalj senare)

# Skapa en slinga som tilldelar siffrorna 1 till 5 # för varje "sväng av slingan" för räknaren i 1 2 3 4 5 gör # Vi skriver ut det aktuella värdet för variabeln # räknare, som analyseras av tecknet $ echo " $ counter ”#Om räknarvärdet är lika med 3 om [$ counter –eq 3] så går # Break ut slingan för break fi gjort

Fortsätt - Liknar att bryta, förutom att den ignorerar den aktuella slingan och går till nästa.

# Skapa en slinga som tilldelar siffrorna 1 till 5 # för varje "vändning av slingan" för räknare i 1 2 3 4 5 gör # Om räknarvärdet är lika med 3 om [$ counter –eq 3] då # Fortsätt förhindrar att resten av den aktuella cykeln analyseras genom att hoppa till nästa omgång, det vill säga #värde 3 kommer inte att skrivas ut. fortsätt fi echo "$ counter" gjort

deklarera: deklarerar variabler och tilldelar dem värden, precis som typeset (de fungerar på samma sätt). Vi kan kombinera det med några alternativ: -i förklarar heltal; -r för skrivskyddade variabler, vars värde inte kan ändras; –A för matriser eller ”matriser”; -f för funktioner; -x för variabler som kan "exporteras" utanför själva skriptets miljö.

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

hjälp: visar hjälp för ett specifikt kommando.

jobb: visar de pågående processerna.

#Med –c visar vi kommandot, med –p # pid (process-id) för varje process. jobb -cp

låt: utvärdera ett aritmetiskt uttryck

låt a = 11 låt a = a + 5 # Slutligen skriver vi ut värdet på a som är 16 eko "11 + 5 = $ a"

lokal: skapa lokala variabler, som helst bör användas i själva skriptets funktioner för att undvika fel. Du kan använda samma funktioner som deklarera kommandot.

local v1 = "Detta är en lokal variabel"

utloggning: gör det möjligt att logga ut helt från en Shell; användbart för fall där vi arbetar med mer än ett Shell-fönster, där kommandot exit endast tillåter att ett fönster avslutas åt gången.

printf: låter dig skriva ut data och formatera dem. Det har många alternativ, så vi kommer att nämna några.

#% f skrivs ut som ett flytande tal, n för ny # rad printf "% fn" 5 5.000000 # & d gör det möjligt att skicka decimaltal som argument printf "Det finns% d order värderade i% d dollar. n" 20 500 Det finns 20 order värderade till 500 Dollar.

läs: läs en rad från standardingången (modul som används för att ladda data via tangentbordet till exempel). Vi kan skicka alternativ som: -t för att ge en läsgräns tid; -a så att varje ord tilldelas en position i aname-arrayen; -d att använda en avgränsare som ska skrivas i slutet av raden; bland andra.

echo "Ange ditt namn och tryck ENTER" #Läs variabelnamnet läsnamn echo "Ditt namn är $ name"

typ: beskriver ett kommando och dess beteende. Det kan vara användbart att ta reda på datadefinitionerna för varje kommando.

typ –a '[' #type berättar för oss att [är ett inbyggt Shell-kommando [är ett inbyggt Shell # -a gör det möjligt att hitta kataloger som innehåller # en körbar med det angivna namnet. [är / usr / bin / [

ulimit: begränsar åtkomst och användning av vissa systemresurser till processer, perfekt för program som tillåter administrativa ändringar eller som riktar sig till olika typer av användare. När vi ställer in en gräns skriver vi ett tal som representerar gränsen kilobytes.

#Vi ser våra nuvarande gränser ulimit –a # -f gör det möjligt för användare att inte kunna # skapa filer större än 512000 Kb (500 #Mb) ulimit –f 512000 # -v begränsar det virtuella minnet i processen. ulimit –v 512000

vänta: vänta tills en viss process eller ett jobb ska utföras för att fortsätta.

# Skriptet väntar på att processen med pid # 2585 ska genomföras

vänta 2585

Andra användbara kommandon som vi kan lägga till i skript representeras av symboler.

!!: kör det sista kommandot igen

! wer: kör det sista kommandot som började med uttrycket "wer".

'==', '! =', '>', '<', '> =' och '<=': relationsoperatorer.

|: OR-operatören brukade vanligtvis gå med i två reguljära uttryck.

: escape-kommando som låter dig formatera uttryck. Till exempel: a för en ljudvarning, n för ny rad, b för bakre utrymme, etc.

Tack Juan Carlos Ortiz!

Innehållet i artikeln följer våra principer om redaktionell etik. Klicka på för att rapportera ett fel här.

10 kommentarer, lämna din

Lämna din kommentar

Din e-postadress kommer inte att publiceras.

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   Medium Svårt sade

    Bra! Hur som helst, 2 kommentarer: Ubuntu-taggen är hälften för många, eftersom den generaliserar något som är generiskt. Och om dessa tutorials fortsätter att gå vidare, skulle det vara bra om de är länkade till varandra ....
    Annat än det är detta drag intressant!

  2.   Låt oss använda Linux sade

    Bra bidrag! Bra!

  3.   Giovanni escobar sosa sade

    Bara saknade referenser för dem som vill lära sig mer om saken. Några bra men inte så lätta att hitta i våra länder är
    - En praktisk guide till Linux-kommandon, redigerare och shell-programmering, Mark Sobell (kapitel 8)
    - Pro Bash Programming, Chris FA Johnson (även om det här är för dem som har andra referenser eller lite mer kunskap).

    Bra artikel

  4.   Låt oss använda Linux sade

    Bra datum! Tack!

  5.   Patricio Dorantes Jamarne sade

    : @ Funktionen "logga in som" raderade min tidigare kommentar, så jag sammanfattar den ytterligare:
    jobb -cp
    bash: jobb: -c: ogiltigt alternativ
    jobb: användning: jobb [-lnprs] [jobspec ...] eller jobb -x-kommando [args]

    -eq -gt -lt accepterar inte decimalpunktvariabler, mellan forum och forum Jag upptäckte att bc är en bra allierad:
    om [`echo 9.999> 10 | bc'-ekv 1]; sedan
    eko "9.999 är större än 10, se till att din processor fortfarande fungerar"
    annars
    echo «9.999 10 är inte större än XNUMX, allt fungerar normalt
    fi

  6.   Inte från Brooklyn sade

    Det här inlägget sammanfattar mycket bra alla generaliteter i bash-skript:
    http://www.aboutlinux.info/2005/10/10-seconds-guide-to-bash-shell.html

    På den här webbplatsen hittar du många frågor och svar om bash-särdrag:
    http://unix.stackexchange.com/questions/tagged/bash

    Här är några riktigt coola manus, och hej, du kan lära dig dem genom att läsa andras manus:
    http://snipplr.com/search.php?q=bash&btnsearch=go

  7.   Inte från Brooklyn sade

    Du har rätt med vad du säger, förutom bash. Varje system jag har sett har bash in / bin / bash.

    Men för python, perl, rubin, etc, är det bra att använda det. jag gör

  8.   Guille sade

    Tillfälligt, på college använder vi bash-skript så att data är 10, mycket bra!

  9.   alex jag såg sade

    en pdf-version att ladda ner skulle vara bra !! 😀

  10.   Marco Antonio De Fuentes sade

    Mycket bra webbplats. Jag hittade äntligen något användbart. Tack.