Com habilitar el mode de depuració d'scripts de Shell a Linux


Un script és simplement una llista d'ordres emmagatzemades en un fitxer. En lloc d'executar una seqüència d'ordres escrivint-les una a una tot el temps al terminal, un usuari del sistema pot emmagatzemar-les totes (ordres) en un fitxer i invoca repetidament el fitxer per tornar a executar les ordres diverses vegades.

Mentre aprenem scripts o durant les primeres etapes d'escriptura de scripts, normalment comencem escrivint scripts petits o curts amb unes quantes línies d'ordres. I normalment depurem aquests scripts sense fer res més que mirar-ne la sortida i assegurar-nos que funcionin com preteníem.

Tanmateix, a mesura que comencem a escriure scripts molt llargs i avançats amb milers de línies d'ordres, per exemple scripts que modifiquen la configuració del sistema, realitzen còpies de seguretat crítiques a les xarxes i molts més, ens adonarem que només mirar la sortida d'un script no és suficient per trobar errors dins d'un script.

Per tant, en aquesta depuració de scripts d'intèrpret d'ordres a la sèrie Linux, veurem com habilitar la depuració de scripts d'intèrpret d'ordres, passarem per explicar els diferents modes de depuració de scripts d'intèrpret d'ordres i com utilitzar-los a la sèrie posterior.

Com iniciar un script

Un script es distingeix dels altres fitxers per la seva primera línia, que conté un #! (She-bang: defineix el tipus de fitxer) i un nom de camí (camí a l'intèrpret) que informa al sistema que el fitxer és una col·lecció d'ordres que seran interpretades pel programa especificat (intèrpret).

A continuació es mostren exemples de les \primeres línies en diferents tipus d'scripts:

#!/bin/sh          [For sh scripting]
#!/bin/bash        [For bash scripting] 
#!/usr/bin/perl    [For perl programming]
#!/bin/awk -f      [For awk scripting]   

Nota: La primera línia o #! es pot deixar fora si un script només conté un conjunt d'ordres estàndard del sistema, sense cap directiva interna de l'intèrpret d'ordres.

Com executar un script de Shell a Linux

La sintaxi convencional per invocar un script de shell és:

$ script_name  argument1 ... argumentN

Una altra forma possible és especificar clarament l'intèrpret d'ordres que executarà l'script de la manera següent:

$ shell script_name argument1 ... argumentN  

Per exemple:

$ /bin/bash script_name argument1 ... argumentN     [For bash scripting]
$ /bin/ksh script_name argument1 ... argumentN      [For ksh scripting]
$ /bin/sh script_name argument1 ... argumentN       [For sh scripting]

Per als scripts que no tenen #! com a primera línia i només contenen ordres bàsiques del sistema com la següent:

#script containing standard system commands
cd /home/$USER
mkdir tmp
echo "tmp directory created under /home/$USER"

Simplement feu-lo executable i executeu-lo de la següent manera:

$ chmod +x  script_name
$ ./script_name 

Mètodes per habilitar el mode de depuració de scripts de Shell

A continuació es mostren les opcions principals de depuració de l'script d'intèrpret d'ordres:

  1. -v (abreviatura de verbose): diu a l'intèrpret d'ordres que mostri totes les línies d'un script mentre es llegeixen, activa el mode detallat.
  2. -n (abreviatura de noexec o no execution): indica a l'intèrpret d'ordres que llegeixi totes les ordres, però no les executa. Aquesta opció activa el mode de comprovació de sintaxi.
  3. -x (abreviatura de xtrace o traça d'execució): diu a l'intèrpret d'ordres que mostri totes les ordres i els seus arguments al terminal mentre s'executen. Aquesta opció habilita el mode de seguiment de l'intèrpret d'ordres.

El primer mecanisme és alterant la primera línia d'un script de shell com a continuació, això permetrà la depuració de tot l'script.

#!/bin/sh option(s)

Al formulari anterior, l'opció pot ser una o una combinació de les opcions de depuració anteriors.

El segon és invocant l'intèrpret d'ordres amb opcions de depuració de la següent manera, aquest mètode també activarà la depuració de tot l'script.

$ shell option(s) script_name argument1 ... argumentN

Per exemple:

$ /bin/bash option(s) script_name argument1 ... argumentN   

El tercer mètode és utilitzar l'ordre integrat set per depurar una secció determinada d'un script d'intèrpret d'ordres, com ara una funció. Aquest mecanisme és important, ja que ens permet activar la depuració en qualsevol segment d'un script de shell.

Podem activar el mode de depuració mitjançant l'ordre set del formulari següent, on l'opció és qualsevol de les opcions de depuració.

$ set option 

Per habilitar el mode de depuració, utilitzeu:

$ set -option

Per desactivar el mode de depuració, utilitzeu:

$ set +option

A més, si hem habilitat diversos modes de depuració en diferents segments d'un script d'intèrpret d'ordres, podem desactivar-los tots alhora de la següent manera:

$ set -

De moment, això és tot amb l'habilitació del mode de depuració d'scripts de shell. Com hem vist, podem depurar un script de shell sencer o una secció concreta d'un script.

En els dos propers episodis d'aquesta sèrie, tractarem com utilitzar les opcions de depuració de scripts d'intèrpret d'ordres per explicar els modes de depuració detallats, de comprovació de sintaxi i de seguiment de l'intèrpret d'ordres amb exemples.

És important destacar que no us oblideu de fer cap pregunta sobre aquesta guia o potser proporcionar-nos comentaris a través de la secció de comentaris a continuació. Fins aleshores, manteniu-vos connectats amb Tecmint.