To debug Bash-Script there are some very useful tools:
Parameter -n
not bash
Using the bash -n
command parses your script to check for typos or to prevent your script from running.
File: exampleBashN.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
$
Command set
The set
command enables and disables some features of bash
. When used with -
, it enables functionality. When using with +
it turns off the same.
set -x
Enables the EXPRESSION print run.
File: 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
Enables printing of LINE executed
File: sampleSetV.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
It aborts script execution when any command fails.
File: sampleSetE.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
Command trap
The trap
command can be used together with 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