The Beginner’s Guide to Shell Scripting: The Basics

El terme "script de shell" s'esmenta sovint als fòrums de Linux, però molts usuaris no ho coneixen. Aprendre aquest mètode de programació fàcil i potent us pot ajudar a estalviar temps, a aprendre millor la línia d’ordres i a desterrar les tedioses tasques de gestió de fitxers.

Què és Shell Scripting?

Ser usuari de Linux significa jugar amb la línia d’ordres. Ens agradi o no, hi ha algunes coses que es fan amb molta més facilitat a través d’aquesta interfície que apuntant i fent clic. Com més utilitzeu i apreneu la línia d’ordres, més veureu el seu potencial. Doncs bé, la mateixa línia d’ordres és un programa: l’intèrpret d’ordres. Actualment, la majoria de distribucions de Linux utilitzen Bash, i això és el que realment introduïu a les ordres.

Ara, alguns de vosaltres que utilitzeu Windows abans d’utilitzar Linux poden recordar fitxers per lots. Es tractava de petits fitxers de text que podríeu emplenar amb ordres per executar i que Windows executaria al seu torn. Va ser una manera intel·ligent i ordenada de fer algunes coses, com ara fer jocs al laboratori d’informàtica de l’institut quan no es podien obrir carpetes del sistema ni crear dreceres. Els fitxers per lots al Windows, tot i que són útils, són una imitació econòmica dels scripts d’intèrpret d’ordres.

Els scripts Shell ens permeten programar ordres en cadenes i fer que el sistema les executi com a esdeveniment amb script, igual que els fitxers per lots. També permeten funcions molt més útils, com ara la substitució d’ordres. Podeu invocar una ordre, com ara data, i utilitzar-la com a part d’un esquema de denominació de fitxers. Podeu automatitzar les còpies de seguretat i a cada fitxer copiat es pot afegir la data actual al final del seu nom. Els scripts tampoc no són només invocacions d’ordres. Són programes per dret propi. La creació de scripts us permet fer servir funcions de programació (com ara bucles "for", declaracions if / then / else, etc.) directament a la interfície del vostre sistema operatiu. I no heu d’aprendre un altre idioma perquè utilitzeu el que ja sabeu: la línia d’ordres.

Això és realment el poder de la creació de guions, crec. Podeu programar amb ordres que ja coneixeu, mentre apreneu els elements bàsics de la majoria dels llenguatges de programació més importants. Necessiteu fer alguna cosa repetitiu i tediós? Guió! Necessiteu una drecera per a una ordre realment complicada? Guió! Voleu crear una interfície de línia d'ordres molt fàcil d'utilitzar per a alguna cosa? Guió!

Abans que comencis

Abans de començar la nostra sèrie de scripts, tractem informació bàsica. Utilitzarem l’intèrpret d’ordres bash, que la majoria de distribucions de Linux utilitzen de forma nativa. Bash també està disponible per a usuaris de Mac OS i Cygwin a Windows. Com que és tan universal, hauríeu de ser capaç de crear scripts independentment de la vostra plataforma. A més, sempre que existeixin totes les ordres a què es fa referència, els scripts poden funcionar en diverses plataformes sense necessitat de modificacions.

Els scripts poden fer servir fàcilment privilegis d’administrador o superusuari, de manera que és millor provar els scripts abans de posar-los en funcionament. Feu servir també el sentit comú, com assegurar-vos que teniu còpies de seguretat dels fitxers en què esteu a punt d’executar un script. També és molt important utilitzar les opcions adequades, com ara –i per a l’ordre rm, de manera que es requereixi la vostra interacció. Això pot evitar alguns errors desagradables. Com a tal, llegiu els scripts que descarregueu i tingueu cura amb les dades que teniu, per si les coses van malament.

En el seu nucli, els scripts són només fitxers de text pla. Podeu utilitzar qualsevol editor de text per escriure-les: gedit, emacs, vim, nano ... Aquesta llista continua. Assegureu-vos de desar-lo com a text pla, no com a text enriquit o com a document de Word. Com que m'encanta la facilitat d'ús que proporciona nano, ho faré servir.

Permisos i noms dels scripts

Els scripts s’executen com programes i, per tal que això passi, han de tenir els permisos adequats. Podeu fer que els scripts siguin executables executant-hi l'ordre següent:

chmod + x ~ / somecrazyfolder / script

Això permetrà a tothom executar aquest script concret. Si voleu restringir-ne l'ús només al vostre usuari, podeu utilitzar-lo:

chmod u + x ~ / somecrazyfolder / script

Per executar aquest script, haureu de cd al directori adequat i després executar-lo així:

cd ~ / somecrazyfolder

./script1

Per fer les coses més còmodes, podeu col·locar scripts a una carpeta "bin" del directori inicial:

~ / bin

En moltes distribucions modernes, aquesta carpeta ja no es crea per defecte, però podeu crear-la. Normalment és aquí on s’emmagatzemen fitxers executables que pertanyen al vostre usuari i no a altres usuaris. Si col·loqueu scripts aquí, podeu executar-los escrivint el seu nom, igual que altres ordres, en lloc d’haver de fer cd al voltant i utilitzar el prefix ‘./’.

Abans de posar nom a un script, però, haureu de fer l'ordre següent per comprovar si teniu instal·lat un programa que utilitzi aquest nom:

quina [ordre]

Molta gent diu que els seus primers scripts són "prova" i, quan intenten executar-lo a la línia d'ordres, no passa res. Això es deu al fet que entra en conflicte amb l'ordre test, que no fa res sense arguments. Assegureu-vos sempre que els noms dels scripts no entren en conflicte amb les ordres, en cas contrari us podeu trobar fent coses que no teniu intenció de fer.

Directrius d’escriptura

Com he esmentat abans, tots els fitxers de script són essencialment de text pla. Això no vol dir que pugueu escriure allò que vulgueu volent o no. Quan s’intenta executar un fitxer de text, els intèrprets d’ordres analitzaran per obtenir pistes sobre si són scripts o no, i sobre com gestionar-ho tot correctament. Per això, hi ha algunes pautes que heu de conèixer.

  1. Tots els scripts haurien d'estar amb "#! / Bin / bash"
  2. Cada nova línia és una ordre nova
  3. Les línies de comentaris comencen per un #
  4. Els comandaments estan envoltats per ()

El Hash-Bang Hack

Quan un intèrpret d’ordres analitza un fitxer de text, la manera més directa d’identificar el fitxer com a script és fer la primera línia:

#! / bin / bash

Si utilitzeu un altre intèrpret d'ordres, substituïu el seu camí aquí. Les línies de comentari comencen amb hash (#), però afegir el bang (!) I el camí de l'intèrpret d'ordres després que sigui una mena de pirateria que evitarà aquesta regla de comentari i obligarà a executar l'script amb l'intèrpret d'ordres a què apunta aquesta línia.

Nova línia = Nova ordre

Totes les línies noves haurien de ser considerades com una ordre nova o un component d’un sistema més gran. Les sentències If / then / else, per exemple, prendran diverses línies, però cada component d'aquest sistema es troba en una línia nova. No deixeu que cap ordre es converteixi en sang a la següent línia, ja que això pot truncar l'ordre anterior i generar un error a la línia següent. Si l’editor de text ho fa, hauríeu de desactivar l’ajustament de text per estar fora de perill. Podeu desactivar l'ajust de text en nano bits fent clic a ALT + L.

Comenta sovint amb #

Si inicieu una línia amb un #, la línia s'ignora. Això el converteix en una línia de comentaris, on podeu recordar-vos quina era la sortida de l'ordre anterior o què farà la següent ordre. De nou, desactiveu l'ajust de text o dividiu el comentari en diverses línies que comencen amb un hash. Utilitzar molts comentaris és una bona pràctica, ja que us permet ajustar els vostres scripts més fàcilment a vosaltres i a altres persones. L’única excepció és l’esmentat hack Hash-Bang, de manera que no seguiu els #s amb! S. ;-)

Els comandaments estan envoltats de parèntesis

Antigament, les substitucions d'ordres es feien amb marques de tick (`, comparteix la tecla ~). Encara no ho tocarem, però com que la majoria de la gent va a explorar després d’aprendre els conceptes bàsics, probablement sigui una bona idea esmentar que en lloc d’utilitzar parèntesis. Això es deu principalment a que quan anideu, poseu ordres dins d'altres ordres, els parèntesis funcionen millor.

El vostre primer guió

Comencem amb un script senzill que us permet copiar fitxers i afegir dates al final del nom del fitxer. Anomenem-lo "datecp". En primer lloc, comprovem si aquest nom entra en conflicte amb alguna cosa:

Podeu veure que no hi ha cap sortida de l’ordre, de manera que estem preparats per utilitzar aquest nom.

Creem un fitxer en blanc a la carpeta ~ / bin:

toca ~ / bin / datecp

I, canviem el permís ara, abans que no oblidem:

Comencem a construir el nostre guió aleshores. Obriu aquest fitxer a l’editor de text que trieu. Com he dit, m’agrada la simplicitat del nano.

nano ~ / bin / datecp

I, anem endavant, posem el primer requisit previ i un comentari sobre el que fa aquest guió.

A continuació, declarem una variable. Si alguna vegada heu pres àlgebra, probablement sabreu què és això. Una variable ens permet emmagatzemar informació i fer-hi coses. Les variables poden "expandir-se" quan es fan referència en un altre lloc. És a dir, en lloc de mostrar el seu nom, mostraran el contingut emmagatzemat. Més endavant, podeu dir a aquesta mateixa variable que emmagatzemi informació diferent i qualsevol instrucció que es produeixi després utilitzarà la informació nova. És un marcador de posició molt elegant.

Què posarem a la variable? Bé, guardem la data i l’hora. Per fer-ho, trucarem a l’ordre data.

Feu un cop d'ull a la captura de pantalla següent per saber com crear la sortida de l'ordre date:

Podeu veure que, afegint diferents variables que comencen amb%, podeu canviar la sortida de l'ordre al que vulgueu. Per obtenir més informació, podeu consultar la pàgina del manual de l’ordre de data.

Utilitzem aquesta última iteració de l'ordre date, "data +% m_% d_% y-% H.% M.% S", i fem servir-la al nostre script.

Si deséssim aquest script ara mateix, el podríem executar i ens donaria la sortida de l’ordre date tal com esperàvem:

Però, fem una cosa diferent. Donem un nom de variable, com ara data_formatteded a aquesta ordre. La sintaxi adequada per a això és la següent:

variable = $ (ordre –arguments d’opcions)

I per a nosaltres, el construiríem així:

date_formatted = $ (data +% m_% d_% y-% H.% M.% S)

Això és el que anomenem substitució d'ordres. Essencialment, diem bash que, sempre que aparegui la variable "data_formatted", executeu l'ordre entre parèntesis. A continuació, s'hauria de mostrar qualsevol sortida de les ordres en lloc del nom de la variable "data_formatted".

Aquí teniu un exemple d’escriptura i el seu resultat:

Tingueu en compte que hi ha dos espais a la sortida. Es mostren l'espai dins de les cometes de l'ordre echo i l'espai davant de la variable. No utilitzeu espais si no voleu que apareguin. Tingueu en compte també que sense aquesta línia "eco" afegida, l'script no donaria absolutament cap resultat.

Tornem al nostre guió. A continuació, afegim la part de còpia de l'ordre.

cp –iv $ 1 $ 2. $ data_formatted

Això invocarà l'ordre de còpia, amb les opcions –i i –v. El primer us demanarà verificació abans de sobreescriure un fitxer i el segon mostrarà allò que es troba a la línia d’ordres.

A continuació, podeu veure que he afegit l'opció "$ 1". Quan s’escriu, un signe de dòlar ($) seguit d’un número denotarà l’argument numerat de l’escriptura quan es va invocar. Per exemple, a l'ordre següent:

cp –iv Trogdor2.mp3 ringtone.mp3

El primer argument és "Trogdor2.mp3" i el segon argument és "ringtone.mp3".

Si mirem enrere el nostre guió, podem veure que fem referència a dos arguments:

Això vol dir que quan executem l’escriptura, haurem de proporcionar dos arguments perquè l’escriptura s’executi correctament. El primer argument, $ 1, és el fitxer que es copiarà i se substituirà com el primer argument de la comanda "cp –iv".

El segon argument, $ 2, actuarà com a fitxer de sortida per a la mateixa ordre. Però també podeu veure que és diferent. Hem afegit un punt i hem fet referència a la variable "data_formatted" des de dalt. Voleu saber què fa això?

Això és el que passa quan s'executa l'script:

Podeu veure que el fitxer de sortida apareix com el que he introduït per $ 2, seguit d'un punt, i després la sortida de l'ordre data. Té sentit, oi?

Ara, quan executeu l’ordre datecp, executarà aquest script i em permetrà copiar qualsevol fitxer a una nova ubicació i afegir automàticament la data i l’hora per finalitzar el nom del fitxer. Útil per arxivar coses.

Les seqüències d’ordres de Shell són el centre de l’operació del vostre sistema operatiu. Tampoc no heu d’aprendre un llenguatge de programació nou per fer-ho realitat. Proveu de fer scripts amb algunes ordres bàsiques a casa i comenceu a pensar en què podeu utilitzar-ho.

Guioneu? Tens algun consell per a principiants? Comparteix les teves opinions als comentaris. Hi ha més coses per venir en aquesta sèrie.


$config[zx-auto] not found$config[zx-overlay] not found