Como executar o modo de depuração de verificação de sintaxe em scripts de shell

Como executar o modo de depuração de verificação de sintaxe em scripts de shell

Iniciamos a série de depuração de scripts Shell explicando as diferentes opções de depuração e como ativar os modos de depuração do script de shell.

Depois de escrever seus scripts de shell, é recomendável verificar praticamente a sintaxe nos scripts antes de executá -los, em vez de olhar para a saída deles para confirmar que eles estão trabalhando corretamente.

Nesta parte da série, examinaremos como usar o modo de depuração de verificação de sintaxe. Lembre -se de que explicamos as diferentes opções de depuração na primeira parte desta série e aqui, nós as usaremos para executar a depuração de scripts.

Permitindo o modo de depuração detalhado

Antes de avançarmos para o foco primário deste guia, exploremos brevemente o modo verboso. É ativado pelo -v opção de depuração, que diz ao shell para exibir todas as linhas em um script enquanto elas são lidas.

Para demonstrar como isso funciona, abaixo está um script de shell de amostra para converter imagens png em formato jpg.

Digite (ou copie e cole) em um arquivo.

#!/bin/bash #convert para imagem em *.png; Converter "$ image" "$ Image%.png.JPG "eco" imagem $ imagem convertida em $ imagem%.png.JPG "FEITO SAIR 0 

Em seguida, salve o arquivo e faça o script executável usando o comando abaixo:

$ chmod +x script.sh 

Podemos invocar o script e exibir todas as linhas nele, pois elas são lidas pela concha como assim:

script $ bash -v.sh 
Exibir todas as linhas no script de shell

Ativando o modo de depuração de verificação de sintaxe em scripts de shell

Voltando ao nosso tópico de ênfase, o -n Ativa o modo de verificação de sintaxe. Ele instrui o shell a ler basicamente todos os comandos, no entanto, não os executa, ele examina apenas a sintaxe usada.

Caso haja erros no seu script de shell, o shell produzirá os erros no terminal, caso contrário, ele não exibe nada.

A sintaxe para ativar a verificação da sintaxe é a seguinte:

script $ bash -n.sh 

Como a sintaxe no script está correta, o comando acima não exibirá nenhuma saída. Portanto, vamos tentar remover o feito palavra que fecha o loop for e veja se mostra um erro:

Abaixo está o script de shell modificado para converter imagens PNG em formato JPG que contém um bug.

#!/Bin/Bash #Script com um bug #convert para imagem em *.png; Converter "$ image" "$ Image%.png.JPG "eco" imagem $ imagem convertida em $ imagem%.png.jpg "saída 0 

Salve o arquivo e execute -o ao executar a verificação da sintaxe:

script $ bash -n.sh 
Verifique a sintaxe no script de shell

A partir da saída acima, podemos ver que há um problema de sintaxe com o nosso script, o loop for falta um fechamento feito palavra -chave palavra. E a concha procurou até o final do arquivo e, uma vez que não o encontrou (feito), o shell imprimiu um erro de sintaxe:

roteiro.SH: Linha 11: Sintaxe Erro: Fim inesperado do arquivo 

Também podemos combinar o modo detalhado e o modo de verificação de sintaxe:

$ Bash -vn script.sh 
Habilitar verificação detalhada e de sintaxe no script

Como alternativa, podemos ativar a verificação da sintaxe modificando a primeira linha do script acima como no próximo exemplo.

#!/bin/bash -n #Altering a primeira linha de um script para ativar a verificação da sintaxe #Converver para imagem em *.png; Converter "$ image" "$ Image%.png.JPG "eco" imagem $ imagem convertida em $ imagem%.png.jpg "saída 0 

Como antes, salve o arquivo e execute -o enquanto executa a verificação da sintaxe:

$ ./roteiro.sh roteiro.SH: Linha 12: Sintaxe Erro: Fim inesperado do arquivo 

Além disso, podemos empregar o comando definido interno para ativar o modo de depuração no script acima.

No exemplo abaixo, estamos apenas verificando a sintaxe do loop for em nosso script.

#!/bin/bash #Using Set Shell Incort Comando para ativar a depuração #Convert #Enable Debugging Set -N para imagem em *.png; Converter "$ image" "$ Image%.png.JPG "eco" imagem $ imagem convertida em $ imagem%.png.JPG "#Disable Debugging Conjunto +n Saída 0 

Mais uma vez, salve o arquivo e invocar o script:

$ ./roteiro.sh 

Em resumo, devemos sempre garantir que verifiquemos sintaticamente nossos scripts de shell para capturar qualquer erro antes de executá -los.

Para nos enviar qualquer dúvida ou feedback sobre este guia, use o formulário de resposta abaixo. Na terceira parte desta série, passaremos a explicar e usar o modo de depuração de rastreamento de shell.