Resum
Els llenguatges de guions, també coneguts amb el nom de llenguatges de scripting, són un tipus de llenguatges de programació d’alt nivell que poden ser de propòsit general o de propòsit específic i gairebé sempre són llenguatges interpretats. Els programes escrits amb aquests llenguatges s’anomenen guions o scripts. Els llenguatges de guions sovint s’utilitzen per ampliar les capacitats que ofereix un altre llenguatge, entorn o aplicació.
Els intèrprets d’ordres dels sistemes operatius també es coneixen amb el nom de shells. El shell és un programa encarregat de llegir les ordres que tecleja l’usuari, interpretar-les i convertir-les en instruccions que el sistema operatiu pot executar. No està integrat al nucli del sistema operatiu, sinó que s’executa com un programa més de l’usuari.
La majoria dels intèrprets d’ordres de tots els sistemes operatius incorporen un llenguatge de programació propi per escriure programes. A aquests els anomenem de diverses maneres: programes per lots, arxius d’ordres, guions de shell o shell scripts. Els intèrprets d’ordres interpreten guions escrits en el llenguatge que saben interpretar. Els llenguatges de guions de shell ofereixen un entorn de programació ràpid per a l’automatització de tasques de manteniment i configuració del sistema.
Els intèrprets d’ordres existents per als sistemes operatius Windows de Microsoft són: el command.com per a DOS i versions de Windows de 16/32 bits, el cmd.exe per als sistemes basats en Windows NT, i el Windows PowerShell per a sistemes amb una instal·lació prèvia del framework (entorn de treball).NET versió 2.0.
Als sistemes Unix i derivats hi ha una gran varietat d’intèrprets d’ordres: el shell Bourne (/bin/sh) va ser un dels primers shells que es van desenvolupar i és un dels intèrprets més coneguts. Va ser escrit per Steve Bourne als Laboratoris Bell i es va convertir en un estàndard de facto. El shell Bash és l’intèrpret d’ordres predeterminat de gairebé totes les distribucions GNU/Linux, així com de Mac OS X, i es pot executar en la majoria dels sistemes operatius tipus Unix. També s’ha portat a Microsoft Windows per al projecte Cygwin. Com que el shell Bash (bash) és compatible amb el shell Bourne (sh), les ordres i els programes escrits per a sh poden ser executats amb bash sense cap modificació, però el contrari no sempre és cert.
La interacció amb Bash es fa a través d’un emulador de terminal. La generació de noms de fitxers permet utilitzar uns caràcters especials per especificar grups de noms de fitxers. El shell realitza la substitució de variables a qualsevol línia d’ordres que contingui un símbol $ seguit d’un nom de variable vàlid. La substitució d’ordres s’utilitza per reemplaçar la sortida de l’execució d’una ordre dins de la mateixa línia d’ordres. El mecanisme d’expansió aritmètica del Bash permet l’avaluació d’una expressió aritmètica i la substitució del resultat. La redirecció de l’entrada o la sortida estàndards d’una ordre ens permet fer que una ordre rebi la seva entrada o envii la seva sortida des de o cap a altres fitxers o dispositius. El shell permet enllaçar la sortida d’una ordre com a entrada d’una altra ordre mitjançant el que anomenem canonades o pipes. Hi ha unes ordres que es fan servir molt en els pipelines i que anomenem filtres.
Un shell script o guió de shell fet en Bash és un conjunt d’ordres emmagatzemades en un fitxer de text pla per poder ser executades posteriorment amb el nom del fitxer. El fitxer del guió de shell ha d’estar compost únicament per text sense format i per això hem d’utilitzar un editor de text pla. La manera més habitual d’executar un script és obrir una sessió de terminal i executar-lo com qualsevol altra ordre del sistema, és a dir, escrivint el nom del fitxer que conté l’script en la línia d’ordres seguit d’un salt de línia.
Quan el Bash executa un guió de shell, crea un procés fill que executa un altre Bash. Els canvis en l’entorn d’un shell fill no afecten a l’entorn del shell pare. Si volem executar un guió en el shell actual enlloc de en un shell fill i, per tant, modificar l’entorn actual, hem d’executar el guió amb l’ordre source.
En escriure shell scripts és recomanable que indiquem el shell que ha d’executar el guió. Per fer-ho, els dos primers caràcters de la primera línia han de ser #!, seguits del nom del shell que ha d’interpretar les ordres que venen a continuació. El codi d’un guió de shell ha d’estar comentat i ben tabulat per tal que el programa sigui llegible.
Un shell script pot requerir interacció amb l’usuari, és a dir, sol·licitar a l’usuari l’entrada de dades o mostrar-li dades de sortida. Per poder interaccionar amb el programa normalment utilitzem les ordres anomenades echo i read, que ens permeten mostrar dades a la pantalla del terminal i llegir dades del teclat en mode text.
La utilització de paràmetres és un mètode per passar dades al programa de manera no interactiva. El llenguatge del shell disposa d’una serie de variables especials que permeten treballar amb aquests paràmetres. Els paràmetres dins del programa són accessibles utilitzant les variables: $0, $1, $2, $3… ${10}, ${11}, ${12}…
El shell ens proporciona una variable especial anomenada ? (signe d’interrogació), que conté el codi de sortida de l’ordre executada anteriorment. En els shell scripts, la majoria de les decisions de programació es controlen analitzant el valor dels codis de sortida. Quan avaluem condicions, el codi de sortida ens indica si la condició és vertadera (retorna 0) o falsa (retorna un valor diferent de zero).
A Bash disposem del mecanisme d’expansió aritmètica per operar i avaluar expressions amb nombres enters, però també tenim altres mètodes, dels quals en veurem dos: l’ordre let i la construcció doble parèntesi. Per aquells casos en què necessitem operar amb nombres amb decimals veurem com fer-ho utilitzant l’ordre bc. Una altra ordre molt utilitzada en la programació de shell scripts per fer avaluacions lògiques és test. Aquesta ordre ens permet avaluar expressions amb tres tipus d’elements: nombres enters, fitxers i cadenes de caràcters.
Les estructures de control (if, case, until, for, etc.) permeten canviar el flux seqüencial d’un programa en funció de l’avaluació d’unes condicions i bifurcar cap a un cantó o cap a un altre o repetir l’execució d’unes instruccions. La utilització de funcions en un guió de shellés una manera d’agrupar una serie d’ordres perquè puguin ser executades posteriorment utilitzant un sol nom. Les funcions accepten paràmetres de la mateixa manera que les ordres o que els guions de shell. En executar una funció, els paràmetres rebuts a la funció esdevenen els paràmetres posicionals durant l’execució de la funció.
Un planificador de tasques és un programari que permet l’execució de tasques de manera desatesa (sense la intervenció de l’usuari) i d’acord amb les condicions descrites en funció d’un calendari o altres esdeveniments. Els sistemes distribuïts de planificació de treballs s’utilitzen en organitzacions amb un nombre de plataformes elevat i variat, per simplificar la gestió de la càrrega de treball de tota l’empresa i per tenir la capacitat de definir treballs mitjançant sistemes distribuïts, assegurant que s’executen en el temps i en la seqüència correcta.
Les eines bàsiques de planificació proporcionades en sistemes operatius com ara Unix i derivats o Windows s’utilitzen en entorns amb un nombre reduït de servidors que no requereixen planificació de tasques distribuïda.
El planificador de tasques dels sistemes Windows de Microsoft s’anomena task scheduler, s’instal·la automàticament amb el sistema operatiu com un servei i s’inicia cada vegada que el sistema és arrencat.
cron és el nom del programa que permet als usuaris de sistemes Unix i derivats planificar l’execució d’ordres o guions de shell de manera automàtica a una data i temps específics. És utilitzat sovint pels administradors de sistemes com a eina per automatitzar les tasques de manteniment, com ara les còpies de seguretat, però pot ser utilitzat amb qualsevol altra finalitat. El fitxer de planificació de tasques del sistema es diu /etc/crontab. És un fitxer de text que només pot modificar l’usuari root i té el mateix format que els crontab d’usuari, però s’afegeix un camp a les línies per especificar amb quin usuari s’executa cada tasca.
Amb l’ordre crontab podem crear o modificar un fitxer de planificació de tasques d’usuari, llistar-ne el contingut o esborrar-lo. És possible controlar quins usuaris poden o no utilitzar els serveis de cron d’una manera molt senzilla amb els fitxers /etc/cron.allow i /etc/cron.deny.
La programació de shell scripts i la utilització d’un planificador de tasques ens facilita l’automatització de moltes de les tasques requerides per al manteniment i la configuració del sistema.
En els sistemes de tipus Unix les còpies de seguretat poden fer-se fàcilment mitjançant shell scripts escrits per exemple en Bash i planificats amb cron que utilitzen les eines bàsiques que ens proporciona el sistema, com tar per empaquetar fitxers i gzip per comprimir les dades.
El programa logrotate, combinat amb el planificador cron, ens dóna la possibilitat d’automatitzar la gestió dels fitxers de registre del sistema i de les aplicacions, però la manipulació d’aquests fitxers també es pot fer amb shell scripts creats per nosaltres amb aquest propòsit.
Altres tasques que s’automatitzen i que no cal programar per ser executades per un planificador de tasques són la gestió d’usuaris, que normalment executem de manera interactiva quan ho necessitem, i l’automatització de l’inici de serveis, que són guions de shell que s’executen amb la inicialització del sistema.



