Programmering i bash - del 1

Mens vi generelt bruger det til administrative eller filhåndteringsoperationer, er komfort de Linux udvider dens funktionalitet langt ud over dette formål, så vi kan programmere scripts Denne guide er ikke beregnet til at være en komplet reference til Bash-programmering, men snarere en introduktion til de grundlæggende kommandoer og strukturer, som giver os mulighed for at udvide styrken i vores GNU / Linux-system.

Hvad er et "script"?

Grundlæggende siger vi, at det er en fil, der indeholder kode skrevet på et bestemt programmeringssprog, som systemet bruger til en bestemt opgave. Det behøver ikke at have en ekstern input eller grafisk grænseflade, men det er nødvendigt at få bearbejdede data til at blive output (selvom brugeren ikke kan se dem).

Det sprog, som Bash bruger, defineres af sin egen tolk og kombinerer syntaksen for andre skaller, såsom Korn Shell (ksh) eller C Shell (csh). Mange af de kommandoer, der normalt bruges i konsollen, kan også bruges i scripts, undtagen dem, der strengt vedrører en bestemt distribution.

Struktur af et script

For at begynde med skal vi have en teksteditor og ønske om at programmere. De filer, vi gemmer med en .sh-udvidelse, kan udføres (eller fortolkes) af konsollen, så længe den første linje er følgende:

#! / Bin / bash

Dette fortæller systemet at bruge konsollen til at køre filen. Derudover giver karakteren # dig mulighed for at skrive kommentarer. For at skabe det enkleste eksempel tilføjer vi endnu en linje set i følgende billede:

Ekkokommandoen viser en besked på skærmen, i dette tilfælde den typiske "Hej verden!" Hvis vi gemmer det og udfører det med konsollen, ser vi resultatet.

Grundlæggende kommandoer

Følgende kommandoer er almindelige og meget nyttige til enhver form for program. Vi præciserer, at der er mange flere, men indtil videre vil vi dække følgende.

Aliaser: tillader, at en streng med ord erstattes af en kortere, hvilket muliggør reduktion af kode.

# Opret et kaldet alias pr med adressen på mappen #Downloads alias pr = '/ hjem / bruger / downloads' # Hver gang vi vil bruge det, skal vi bare kalde # det nye ord pr. # For at ødelægge det alias, vi brug unalias unalias pr

pause: giver dig mulighed for straks at afslutte et for, mens, indtil eller vælge loop (vi studerer loops detaljeret senere)

# Opret en sløjfe, der tildeler tallene fra 1 til 5 # for hver "drejning af sløjfen" til tæller i 1 2 3 4 5 gør # Vi udskriver den aktuelle værdi af variablen # tæller, som analyseres af tegnet $ ekko "$ tæller" #Hvis tællerværdien er lig med 3, hvis [$ tæller-ækv. 3], så går #bruddet ud af sløjfen for pause fi udført

fortsæt - svarer til brud, bortset fra at det ignorerer den aktuelle sløjfe og går til den næste.

# Opret en løkke, der tildeler numrene fra 1 til 5 # for hver "drejning af løkken" til tæller i 1 2 3 4 5 gør #Hvis tællerværdien er lig med 3, hvis [$ tæller-ækv 3] så # Fortsæt forhindrer, at resten af ​​# nuværende cyklus analyseres ved at hoppe til næste runde, dvs. #værdien 3 udskrives ikke. fortsæt fi ekko "$ counter" færdig

erklær: erklærer variabler og tildeler dem værdier, ligesom typesæt (de fungerer på samme måde). Vi kan kombinere det med nogle muligheder: -i erklærer heltal; -r for skrivebeskyttede variabler, hvis værdi ikke kan ændres; –A for arrays eller “arrays”; -f til funktioner; -x for variabler, der kan "eksporteres" uden for selve scriptets miljø.

erklære –i num = 12 erklære –x pi = 3.14

hjælp: viser hjælp til en bestemt kommando.

job: viser de kørende processer.

#Med –c viser vi navnet på kommandoerne med –p # pid (proces-id) for hver proces. job -cp

lad: evaluere et aritmetisk udtryk

lad a = 11 lad a = a + 5 # Endelig udskriver vi værdien af ​​a som er 16 ekko "11 + 5 = $ a"

lokal: Opret lokale variabler, som fortrinsvis skal bruges i selve scriptets funktioner for at undgå fejl. Du kan bruge de samme funktioner som erklær kommandoen.

local v1 = "Dette er en lokal variabel"

logout: tillader fuldstændig aflogning af en Shell; nyttigt i tilfælde, hvor vi arbejder med mere end et Shell-vindue, hvor exit-kommandoen kun tillader et vindue at blive afsluttet ad gangen.

printf: giver dig mulighed for at udskrive data og formatere dem. Det har mange muligheder, så vi vil nævne et par stykker.

#% f udskriver som et flydende tal, n for nyt # linje printf "% fn" 5 5.000000 # & d giver mulighed for at videregive decimaltal som argumenter printf "Der er% d ordrer værdiansat i% d dollars. n" 20 500 Der er 20 ordrer til en værdi af 500 dollars.

læse: læse en linje fra standardinput (modul, der f.eks. bruges til at indlæse data gennem tastaturet). Vi kan videregive muligheder som: -t for at give en læsegrænsetid; -a således at hvert ord tildeles en position i aname-arrayet; -d at bruge en afgrænser, der skrives i slutningen af ​​linjen; blandt andre.

ekko "Indtast dit navn og tryk på ENTER" #Læs variabelnavnet læs navn ekko "Dit navn er $ name"

type: beskriver en kommando og dens adfærd. Det kan være nyttigt at finde ud af datadefinitionerne for hver kommando.

type –a '[' #type fortæller os, at [er en shell-indbygget kommando [er en shell-indbygget # -a gør det muligt at finde de mapper, der indeholder # en eksekverbar med det skrevne navn. [er / usr / bin / [

ulimit: begrænser adgangen til og anvendelsen af ​​visse systemressourcer til processer, ideel til programmer, der tillader administrative ændringer, eller som er orienteret mod forskellige typer brugere. Når vi sætter en grænse, skriver vi et tal, der repræsenterer kilobytes af grænsen.

#Vi ser vores nuværende grænser ulimit –a # -f giver mulighed for at begrænse brugere til ikke at være i stand til # at oprette filer større end 512000 Kb (500 #Mb) ulimit –f 512000 # -v begrænser den virtuelle hukommelse af processen. ulimit –v 512000

Vent: Vent på, at en bestemt proces eller et job udføres for at fortsætte.

#Scriptet venter på, at processen med pid # 2585 skal udføres

vent 2585

Andre nyttige kommandoer, som vi kan tilføje til scripts, er repræsenteret af symboler.

!!: kør den sidste kommando igen

! wer: udfører den sidste kommando, der startede med udtrykket “wer”.

'==', '! =', '>', '<', '> =' og '<=': relationelle operatører.

|: OR-operatøren plejede generelt at deltage i to regulære udtryk.

: escape-kommando, der giver dig mulighed for at formatere udtryk. For eksempel: a for en lydalarm, n for newline, b for backspace osv.

Tak Juan Carlos Ortiz!

10 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   Medium Svær sagde han

    Store! Alligevel 2 kommentarer: Ubuntu-tagget er halvt for mange, da det generaliserer noget, der er generisk. Og hvis disse tutorials fortsætter med at gå videre, ville det være godt, hvis de er knyttet til hinanden ....
    Bortset fra det er dette træk interessant!

  2.   Lad os bruge Linux sagde han

    Godt bidrag! Store!

  3.   Giovanni escobar sosa sagde han

    Kun manglende referencer til dem, der ønsker at komme mere ind i sagen. Nogle gode, selvom de ikke er så lette at finde i vores lande
    - En praktisk guide til Linux-kommandoer, redaktører og shell-programmering, Mark Sobell (kapitel 8)
    - Pro Bash Programmering, Chris FA Johnson (selvom dette er for dem, der har andre referencer eller lidt mere viden).

    God artikel

  4.   Lad os bruge Linux sagde han

    God dato! Tak skal du have!

  5.   Patricio Dorantes Jamarne sagde han

    : @ Funktionen "log ind som" slettede min tidligere kommentar, så jeg opsummerer den yderligere:
    job -cp
    bash: job: -c: ugyldig mulighed
    job: brug: job [-lnprs] [jobspec ...] eller job -x kommando [args]

    -eq -gt -lt accepterer ikke decimaltegnvariabler mellem forum og forum Jeg opdagede at bc er en god allieret:
    hvis [`ekko 9.999> 10 | bc'-ækv. 1]; derefter
    ekko "9.999 er større end 10, sørg for at din processor stadig fungerer"
    andet
    ekko «9.999 er ikke større end 10, alt fungerer normalt
    fi

  6.   Ikke fra Brooklyn sagde han

    Dette indlæg opsummerer meget godt alle generelle bash-scripting:
    http://www.aboutlinux.info/2005/10/10-seconds-guide-to-bash-shell.html

    På dette websted finder du mange spørgsmål og svar om bash-særegenheder:
    http://unix.stackexchange.com/questions/tagged/bash

    Her er nogle rigtig seje scripts, og hej, du kan lære dem ved at læse andres scripts:
    http://snipplr.com/search.php?q=bash&btnsearch=go

  7.   Ikke fra Brooklyn sagde han

    Du har ret i hvad du siger, undtagen bash. Hvert system, jeg har set, har bash in / bin / bash.

    Men for python, perl, rubin osv. Er det fint at bruge det. jeg gør

  8.   Guille sagde han

    Tilfældigvis bruger vi på college bash-scripting, så dataene er 10, meget gode!

  9.   alex jeg så sagde han

    en pdf-version til download ville være god !! 😀

  10.   Marco Antonio De Fuentes sagde han

    Meget god side. Endelig fandt jeg noget nyttigt. Tak skal du have.