Programant en Bash - part 1

Si bé el fem servir generalment per a operacions administratives o de gestió d'arxius, la consola de Linux estén la seva funcionalitat molt més enllà d'aquest propòsit, permetent-nos programar scripts d'acord a les nostres necessitats.Aquesta guia no pretén ser una referència completa sobre la programació en Bash, sinó una introducció als comandaments i estructures bàsiques, la qual cosa ens permetrà ampliar el poder del nostre sistema GNU / Linux.

Què és un "Script"?

Bàsicament diem que és un arxiu que conté codi escrit en determinat llenguatge de programació que el sistema fa servir per a determinada tasca. No cal que tingui una entrada externa ni interfície gràfica, però sí que provoqui una sortida de dades processades (per més que l'usuari no els vegi).

El llenguatge usat per Bash està definit pel seu propi intèrpret i combina la sintaxi d'altres Shells, com el Korn Shell (ksh) o el C Shell (csh). Molts dels comandaments que usualment s'usen en la consola també poden usar-se en els scripts, excepte aquells que pertanyen estrictament a una distribució en particular.

Estructura d'un Script

Per començar hem de comptar amb un editor de text i ganes de programar. Els arxius que guardem amb extensió .sh podran ser executats (o interpretats) per la consola, sempre que la primera línia sigui la següent:

#! / Bin / bash

Això li diu a el sistema que haurà de fer servir la consola per executar l'arxiu. A més, el caràcter # permet escriure comentaris. Per crear l'exemple més simple afegim una línia més, vista en la següent imatge:

La comanda echo mostra un missatge en pantalla, en aquest cas el típic "Hello world!". Si el guardem i executem amb la consola veurem el resultat.

ordres bàsiques

Els següents ordres són comuns i molt útils per a qualsevol tipus de programa. Aclarim que hi ha molts més, però per ara cobrirem els següents.

Alias: permet que una cadena de paraules sigui substituïda per una més curta, permetent la reducció de el codi.

#creamos un àlies anomenat per amb la direcció de la #carpeta Descàrregues àlies per = '/ home / usuari / Descàrregues' #Cada vegada que vulguem usar-lo només hem de trucar a #la nova paraula per #per destruir aquest àlies, fem servir unalias unalias per

break: permet sortir immediatament d'un cicle for, while, until o select (més endavant estudiarem detalladament els cicles)

#Creamos un cicle que assignarà els números de l'1 a el 5 #por cada "volta de cicle" for comptador in 1 2 3 4 5 do #Imprimimos l'actual valor de la variable #contador, el qual és analitzat pel caràcter $ echo " $ comptador "# Si el valor de comptador és igual a 3 if [$ comptador -eq 3] then #El break surt de l'cicle for break fi done

continue: similar a l'break, excepte que ignora l'actual volta de cicle i passa a la següent.

#Creamos un cicle que assignarà els números de l'1 a el 5 #por cada "volta de cicle" for comptador in 1 2 3 4 5 do # Si el valor de comptador és igual a 3 if [$ comptador -eq 3] then #Continue impedeix que es analitzi la resta de l'cicle #actual saltant a la següent volta, o sigui que el #valor 3 no s'imprimirà. continue fi echo "$ comptador" done

declari: declara variables i els assigna valors, a l'igual que typeset (funcionen de la mateixa manera). Podem combinar-la amb algunes opcions: -i declara nombres enters; -r per a variables de tan sols lectura, a les quals no se'ls podrà canviar el valor; -a per matrius o "arrays"; -f per a funcions; -x per a variables que podran ser "exportades" fora de l'ambient de l'script propi.

declari -i num = 12 declari -x pi = 3.14

help: mostra l'ajuda d'un comando concret.

jobs: mostra els processos en execució.

#Con -c vam mostrar el nom dels comandos, amb -p #el pid (id de procés) de cada procés. jobs -cp

let: avalua una expressió aritmètica

let a = 11 let a = a + 5 #Finalmente imprimim el valor de a que és 16 echo "11 + 5 = $ a"

local: crea variables locals, les quals han de ser usades preferentment en funcions de l'propi scripts per evitar errors. Feu servir les mateixes funcions de la comanda declari.

local v1 = "Aquesta és una variable local"

logout: permet sortir de l'inici de sessió d'un Shell completament; útil per als casos on treballem amb més d'una finestra de Shell, en els quals la comanda exit només permetrà finalitzar una finestra a la vegada.

printf: permet imprimir una dada i donar-li format. Compta amb moltes opcions, així que esmentarem algunes.

#% F imprimeix com a número flotant, n per a nova # línia printf "% fn" 5 5.000000 # & d permet passar nombres decimals com a arguments printf "Hi ha% d comandes valuados a% d dólares.n" 20 500 ha 20 comandes valuados a 500 dòlars.

read: llegeix una línia de standard input (mòdul usat en la càrrega de dades per mitjà de el teclat per exemple). Podem passar opcions com: -t per donar un temps límit de lectura; -a perquè cada paraula sigui assignada a una posició de l'array aname; -d per utilitzar un delimitador que s'escriurà a la fi de la línia; entre d'altres.

echo "Introduïu el vostre nom i pressiona Enter" #Leemos la variable nom read nom echo "El teu nom és $ nom"

type: descriu una ordre i el seu comportament. Pot ser útil per a esbrinar les definicions de dades de cada comanda.

type -a '[' #type ens diu que [és una ordre builtin de l'Shell [is a Shell builtin # -a permet trobar els directoris que contenen #Un executable amb el nom escrit. [Is / usr / bin / [

ulimit: limita l'accés i ús de certs recursos de sistema als processos, ideal per a programes que permeten fer canvis administratius o que estan orientats a diferents tipus d'usuaris. A l'establir un límit escrivim un nombre que representa els kilobytes de el límit.

#Vemos nostres límits actuals ulimit -a # -f permet limitar als usuaris a que no puguin #crear arxius de major grandària que 512000 Kb (500 #Mb) ulimit -f 512000 # -v limita la memòria virtual de l'procés. ulimit -v 512000

wait: espera que es realitzi determinat procés o treball per continuar.

#El script espera que es realitzi el procés de pid # 2585

espera 2585

Altres ordres útils que podem afegir als scripts estan representats per símbols.

!!: executa novament l'últim comando

! Wer: executa l'últim comando que començava amb l'expressió "wer".

'==', '! =', '>', '<', '> =', I '<=': operadors relacionals.

|: L'operador OR usat generalment per a unir dues expressions regulars.

: Comanda d'escapament que permet formatar les expressions. Per exemple: a per un avís de so, n per a nova línia, b per la reculada, etc.

Gràcies Joan Carles Ortiz!

El contingut d'l'article s'adhereix als nostres principis de ètica editorial. Per notificar un error punxa aquí.

10 comentaris, deixa el teu

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   medi Difícil va dir

    Boníssim! De tota manera febrer comentaris: El tag d'Ubuntu aquesta mitjà de més, com que generalitza una cosa que és genèric. I si aquests estatuts segueixen avançant estaria bé que estiguin vinculats entre si ....
    A part d'això, aquesta moguda aquesta interessant!

  2.   Fem servir Linux va dir

    Bona aportació! Genial!

  3.   Giovanni Escobar Insulsa va dir

    Només van faltar referències per a qui vulgui ficar-se més a l'assumpte. Uns bons encara que no tan fàcils de trobar en els nostres països són
    - A practical Guide to Linux Commands, Editors, and Shell Programming, Mark Sobell (capítol 8)
    - Pro Bash Programming, Chris FA Johnson (encara que aquest és per a qui tingui altres referències o una mica més de coneixements).

    Bon article.

  4.   Fem servir Linux va dir

    Bona dada! Gràcies!

  5.   Patricio Dorantes Jamarne va dir

    : @ La funció de «log in es» va esborrar el meu comentari anterior, així que ho resumiré més:
    jobs -cp
    bash: jobs: -c: invalid option
    jobs: usage: jobs [-lnprs] [jobspec ...] or jobs -x command [args]

    -eq -gt -lt no accepten variables de punt decimal, entre fòrum i fòrum vaig descobrir que bc és un bon aliat:
    if [ `tiro 9.999> 10 | bc` -eq 1]; then
    trobo «9.999 és més gran que 10, assegura't que el teu processador segueix funcionant»
    else
    trobo «9.999 no és més gran que 10, tot marxa normalment
    fi

  6.   NotFromBrooklyn va dir

    Aquest post et resumeix molt bé totes les generalitats de l'bash scripting:
    http://www.aboutlinux.info/2005/10/10-seconds-guide-to-bash-shell.html

    En aquest lloc es troben moltes preguntes i respostes sobre particularitats de bash:
    http://unix.stackexchange.com/questions/tagged/bash

    Aquí hi ha alguns script molt interessants i, ¡ehh !, es pot aprendre llegint els scripts d'altres:
    http://snipplr.com/search.php?q=bash&btnsearch=go

  7.   NotFromBrooklyn va dir

    Tens raó amb el que dius, excepte per bash. Tots els sistemes que he vist han tingut bash en / bin / bash.

    Però per python, perl, ruby, etc, està molt bé utilitzar això. Jo ho faig

  8.   Guille va dir

    Casualment a la facultat estem amb bash scripting així que la data em ve de 10, molt bo!

  9.   alex vaig veure va dir

    una versió en pdf per baixar-lo estaria bo !! 😀

  10.   Marc Antonio De Fonts va dir

    Molt bon lloc. Per fi vaig trobar una mica l'últ. Gràcies.