To debug Bash-Script there are some very useful tools:
Parameter -n
in the bash
The use of the command bash -n
parses your script, to check if there are typos or that prevent your script from running.
File: exemploBashN.sh
#!/bin/bash
echo "Isso é um exemplo"
echo "Agora falta uma aspas
echo "E o bash -n deve notificar esse problema"
Execution:
$bash -n exemploBashN.sh
exemploBashN.sh: line 5: unexpected EOF while looking for matching `"'
exemploBashN.sh: line 7: syntax error: unexpected end of file
$
Commando set
The command set
enables and disables some features of bash
. When used with -
, it enables functionality. When using with +
he turns it off.
set -x
Enables printing of the executed EXPRESSION.
File: For exampleBashSetX.sh
#!/bin/bash
set -x
echo "Quantos anos você tem?"
read idade
echo "Você tem $idade anos"
set +x
echo "Agora sem imprimir a expressão executada"
Execution:
$./exemploSetX.sh
+ echo 'Quantos anos você tem?'
Quantos anos você tem?
+ read idade
26
+ echo 'Você tem 26 anos'
Você tem 26 anos
+ set +x
Agora sem imprimir a expressão executada
$
set -v
Activate the executed LINE print
File: exemploSetV.sh
#!/bin/bash
set -v
echo "Quantos anos você tem?"
read idade
echo "Você tem $idade anos"
set +x
echo "Agora sem imprimir a LINHA executada"
Execution:
$./exemploSetV.sh
echo "Quantos anos você tem?"
Quantos anos você tem?
read idade
26
echo "Você tem $idade anos"
Você tem 26 anos
set +v
Agora sem imprimir a LINHA executada
$
set -e
Abort script execution when any command fails.
File: exemploSetE.sh
#!/bin/bash
set -e
echo "Carregando www.goooooooogle.com.br (site não existe)"
curl -v -f "www.goooooooogle.com.br" > site.html
echo "Essas linha não serão executadas"
echo "pois o comando 'curl' não conseguiu executar com sucesso"
set +e
echo "Nem essas, pois o script já foi abortado."
Execution:
./exemploSetE.sh
Carregando www.goooooooogle.com.br (site não existe)
* Rebuilt URL to: www.goooooooogle.com.br/
* Could not resolve host: www.goooooooogle.com.br
* Closing connection 0
curl: (6) Could not resolve host: www.goooooooogle.com.br
Commando trap
The command trap
can be used together with the read
to simulate the use of breakpoints.
#!/bin/bash
echo "após o comando \"trap 'read' DEBUG\", aperte ENTER para executar o proximo comando"
trap 'read' DEBUG
echo "olá"
echo "mundo"
echo "bash"
echo "é só love"
trap - DEBUG
echo "agora"
echo "sem"
echo "debug"
$
Execution:
$./exemploTrap.sh
após o comando "trap 'read' DEBUG", aperte ENTER para executar o proximo comando
<ENTER>
olá
<ENTER>
mundo
<ENTER>
bash
<ENTER>
é só love
<ENTER>
agora
sem
debug
$
Source
Thanks for the answer helped a lot, I doing some research here found this tutorial that tbm is well explained.
– rafaelvaloto