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.
10 comentaris, deixa el teu
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!
Bona aportació! Genial!
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.
Bona dada! Gràcies!
: @ 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
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
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
Casualment a la facultat estem amb bash scripting així que la data em ve de 10, molt bo!
una versió en pdf per baixar-lo estaria bo !! 😀
Molt bon lloc. Per fi vaig trobar una mica l'últ. Gràcies.