Debug em Shell Scripts

Publicado por Daniel Zaia Manzano em 20/03/2013

[ Hits: 11.095 ]

 


Debug em Shell Scripts



Muitas vezes queremos verificar se um determinado shell script está funcionando normalmente, ou queremos resolver algum bug estranho.

Para isso basta incluir os seguintes parâmetros ao bash, na 1ª linha do shell script:

#!/bin/bash -vx


Onde:
  • v :: Mostra os comandos à medida que são lidos pelo bash.
  • x :: Expande os resultados dos comandos e variáveis (muito útil quando o shell script possui variáveis numéricas e laços de repetição, por exemplo).

Exemplo: Código fonte

#!/bin/bash -vx
echo
read -p "Digite uma palavra: " PAL1
echo
echo "$PAL1"
echo
read -p "Digite outra palavra: " PAL2
echo
echo "$PAL2"
echo
NUMB=0
for cont in $(seq 1 1 10)
do
     NUMB=$(($NUMB+1))
     echo "$NUMB"
done
echo


Resultado normal:


Digite uma palavra: GNU
GNU

Digite outra palavra: Linux
Linux

1
2
3
4
5
6
7
8
9
10


Resultado com "debug" ativado:

#!/bin/bash -vx
echo
+ echo

read -p "Digite uma palavra: " PAL1
+ read -p 'Digite uma palavra: ' PAL1
Digite uma palavra: GNU
echo
+ echo

echo "$PAL1"
+ echo GNU
GNU
echo
+ echo

read -p "Digite outra palavra: " PAL2
+ read -p 'Digite outra palavra: ' PAL2
Digite outra palavra: Linux
echo
+ echo

echo "$PAL2"
+ echo Linux
Linux
echo
+ echo

NUMB=0
+ NUMB=0
for cont in $(seq 1 1 10)
do
     NUMB=$(($NUMB+1))
     echo "$NUMB"
done
seq 1 1 10)
seq 1 1 10
++ seq 1 1 10
+ for cont in '$(seq 1 1 10)'
+ NUMB=1
+ echo 1
1
+ for cont in '$(seq 1 1 10)'
+ NUMB=2
+ echo 2
2
+ for cont in '$(seq 1 1 10)'
+ NUMB=3
+ echo 3
3
+ for cont in '$(seq 1 1 10)'
+ NUMB=4
+ echo 4
4
+ for cont in '$(seq 1 1 10)'
+ NUMB=5
+ echo 5
5
+ for cont in '$(seq 1 1 10)'
+ NUMB=6
+ echo 6
6
+ for cont in '$(seq 1 1 10)'
+ NUMB=7
+ echo 7
7
+ for cont in '$(seq 1 1 10)'
+ NUMB=8
+ echo 8
8
+ for cont in '$(seq 1 1 10)'
+ NUMB=9
+ echo 9
9
+ for cont in '$(seq 1 1 10)'
+ NUMB=10
+ echo 10
10
echo
+ echo


Para ativar este efeito na própria linha de comando:

set -vx

Para desativar:

set +vx

Para mais informações, consulte:

man bash

Outras dicas deste autor

Como fazer para que comandos não sejam gravados no histórico

netstat -ltunp: Descobrindo serviços rodando no sistema e respectivos PIDs

Eliminando mensagem de aviso de configuração de rede no Debian

rssh - Cópia segura de arquivos entre máquinas GNU/Linux

Alterar editor de textos padrão no Debian Squeeze

Leitura recomendada

Wolfenstein Enemy Territory no Ubuntu 12 com som e Omnibots

MyIP - Facilitador para obter endereço IP externo

Como personalizar o seu Blackbox (básico)

Pacman - Turbinado com Aria2c

Tornando o Wget interativo via linha de comando

  

Comentários
[1] Comentário enviado por lcavalheiro em 20/03/2013 - 15:12h

Isso é legal!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts