How to debug shell script in linux?

Asked

Viewed 1,001 times

5

I’m new to linux, and I’m learning shell script and my question is this:.

When I want to debug something in PHP for example, I put a breakpoint in the code and run the same with the debug on, I wanted to Seber how can I do this with a shell script? Would I be able to do the debug by passing the line of my code? Thank you.

2 answers

4


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

4

You can debug bash by running the script with the -x parameter:

bash -x nome_do_seu_script.sh

If you just want to debug a part of the code, you can end it with set:

set -x
<código>
set +x
  • Thanks for the answer helped a lot, I doing some research here found this tutorial that tbm is well explained.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.