Todas as linguagens de programação têm algumas abordagens comuns e poucas distintas para encontrar bugs. Por exemplo, programas de depuração podem ser usados para remover erros rapidamente. Enquanto o shell script não possui nenhuma ferramenta específica para depurar o código. Esta redação é sobre discutir várias técnicas de depuração que podem ser usadas para tornar o script Bash sem erros. Antes de mergulhar nos métodos, vamos ter um entendimento básico de conchas e scripts de conchas:
Qual é a concha no Linux?
Quando você inicializa seu computador, o kernel obtém informações sobre o hardware anexado e permite que outros componentes anexados interajam. Além disso, ele gerencia memória, CPU e reconhece qualquer novo periférico. Em suma, um kernel é a espinha dorsal de qualquer sistema operacional. Mas você já pensou em interagir diretamente com o kernel, comandar para executar uma tarefa específica? É até praticável fazer isso? Absolutamente! Com a ajuda de um shell, um programa de computador com uma interface interativa, qualquer um pode operar o kernel. O shell permite que os humanos interajam com o kernel e o instrua a executar qualquer tarefa.
No Unix, existem duas conchas principais Bourne Shell e C Shell. Ambos os tipos têm suas subcategorias. Diferentes tipos de conchas de bourne são Korn Shell (Ksh), Almquist Shell (Ash), Bourne novamente Shell (Bash), e Z Shell (ZSH). Ao mesmo tempo, o shell C tem suas próprias subcategorias como C Shell (CSH) e Tenex c shell (TCSH). Como mencionado acima, de todas as conchas, Bash (Bourne novamente Shell) é a concha mais usada e sai da caixa em muitas distribuições Linux devido à sua eficiência e facilidade de uso.
Bash é o shell padrão de muitas distribuições Linux e é amplamente usado por milhões de usuários do Linux. É tão diversificado e influente que pode executar todas as tarefas que você geralmente executa em aplicativos baseados em GUI. Você pode editar arquivos, gerenciar arquivos, visualizar fotos, ouvir música, reproduzir vídeos e muito mais.
O que é um script de shell:
Como aprendemos a idéia básica de Shell, agora vamos para o script de shell. O script Shell é um programa de computador que executa vários comandos em um shell que atua como um intérprete para desempenhar uma função específica. Como discutido acima, existem 2 tipos particulares de conchas. No entanto, este guia está focado no shell de Bourne novamente (Bash).
Então, o que é um script de festa? No Linux, todos os comandos do BASH são armazenados em "/Usr/bin" e "/bin" pastas. Por exemplo, sempre que você executa um comando, bases pesquisas se houver no diretório ou não. O comando é executado se encontrar nos diretórios que mais dê um erro.
Que tal executar uma tarefa que precisa de vários comandos para executar no terminal? Nesta situação específica, o script de bash pode ajudá -lo. Bash Script é uma forma de script de shell que permite que você faça programas para executar vários comandos bash para executar uma tarefa específica.
O que são bugs no script de bash:
Enquanto trabalha com scripts de bash ou com outras linguagens de programação, você encontra muitos erros. Um bug é um erro ou uma falha no programa que pode fazer com que o programa se comporte incorretamente.
Toda linguagem de programação tem seu próprio procedimento para encontrar bugs; Da mesma forma, Bash também tem muitas opções de construção para depurar um programa de terminal.
Gerenciar erros e depurar um programa não é menos que um aborrecimento. É um trabalho demorado e pode piorar se você não estiver ciente das ferramentas certas para depurar seu programa. Este artigo é um guia completo sobre a depuração de scripts de bash para tornar seu script sem erros. Então, vamos começar:
Como depurar um script Bash:
Quando você trabalha em grandes projetos de programação, você encontra muitos erros ou bugs. Debugando um programa às vezes pode ser complicado. Os programadores geralmente utilizam ferramentas de depuração, e muitos editores de código também ajudam na descoberta de bugs, destacando a sintaxe.
Existem várias ferramentas no Linux para depurar códigos, por exemplo, GNU Debugger, também conhecido como “GDB.”Ferramentas como o GDB são úteis para linguagens de programação que compilam em binários. Como Bash é uma linguagem interpretada simples, não há necessidade de ferramentas pesadas para depurar.
Existem várias técnicas tradicionais para depurar um código de script bash, e uma delas está adicionando “Afirações.” Asserções são condições adicionadas aos programas para verificar condições específicas e executar o programa de acordo. É uma técnica defensiva que ajuda a encontrar bugs e testes também. Você pode encontrar muitas ferramentas que ajudam a adicionar afirmações em scripts de bash.
Bem, adicionar afirmações é uma das técnicas tradicionais antigas. Existem conjuntos de bandeiras/opções disponíveis no Bash para depurar um script de basquete. Essas opções podem ser adicionadas junto com Shebang nos scripts ou adicionados ao executar o programa no terminal. Os tópicos que vamos ocupar estão listados abaixo:
Então, vamos verificar várias técnicas em Bash para depurar um script de bash:
Como depurar o script Bash, permitindo a opção detalhada “-v”:
Uma das abordagens mais fáceis de depurar o script bash é usar o "-V" opção, também conhecida como detalhe. A opção pode ser adicionada ao shebang ou explicitamente colocada com o nome do arquivo de script enquanto executa. A opção Verbose será executada e imprimirá todas as linhas do código como o processo pelo intérprete. Vamos entender com um exemplo de script de bash:
#! /BIN/BASH
eco "Enter Number1"
Leia o número1
eco "Enter Number2"
Leia o número2
Se ["$ número1" -gt "$ número2"]
então
eco "número1 é maior que o número2"
Elif ["$ número1" -eq "$ número2"]
então
eco "número1 é igual a número2"
outro
eco "número2 é maior que o número1"
fi
O código acima está recebendo dois números do usuário e, em seguida, executando algumas declarações condicionais para verificar se o número é mais significativo, menos ou igual ao outro número inserido. Embora qualquer editor de texto possa ser usado para scripts de bash, estou usando o VIM Editor. O VIM é um editor poderoso e rico em recursos que destaca a sintaxe dos scripts do Bash e reduz as chances de erros de sintaxe. Se você não possui editor do VIM, obtenha -o executando o comando mencionado abaixo:
$ sudo apt install vim
Crie um arquivo de script bash usando:
$ vim b_script.sh
Se você é novo no editor do VIM, recomendo que você aprenda a usar o editor do VIM antes de prosseguir.
Agora, de volta ao script, execute o script usando "-V" opção:
$ bash -v b_script.sh
Pode ser visto na saída acima que cada linha do script é impressa no terminal enquanto processam pelo intérprete. Observe que o script deixará de receber a entrada do usuário e depois processará a próxima linha do script. Como discutido acima, o "-V" A opção pode ser colocada após Shebang, como mostrado no seguinte:
#! /bin/bash -v
Da mesma forma, a bandeira detalhada também pode ser adicionada na próxima linha de Shebang usando o "definir" comando:
#! /BIN/BASH
SET -V
Qualquer um dos métodos discutidos acima pode ativar detalhadamente.
2 Como depurar o script Bash usando a opção XTRACE “-x”:
O rastreamento de execução, também conhecido como Xtrace, é uma opção de depuração inteligente e útil, especialmente para rastrear erros lógicos. Erros lógicos são geralmente associados a variáveis e comandos. Para verificar o estado da variável durante a execução do script, usamos o "-X" opção. Agora, novamente, execute o “B_Script.sh ” arquivo com o "-X" bandeira:
$ bash -x b_script.sh
A saída está mostrando explicitamente o valor de cada variável durante o processo de execução. Novamente, o "-X" pode ser usado ao lado do shebang e depois da linha Shebang usando o comando set. O XTRACE coloca o sinal "+" com cada linha do script.
3 Como depurar o script Bash usando a opção Noexec “-n”:
Erros de sintaxe são uma das principais causas de bugs. Para depurar sintaticamente o script Bash, usamos “Noexec” (sem execução) modo. A opção usada para o modo NoExec é “-N.” Ele exibirá apenas os erros de sintaxe do código em vez de executá -lo. Uma abordagem muito mais segura para depurar o código. Vamos executar “B_Script.sh ” novamente com o "-N" opção:
$ bash -n b_script.sh
Não haverá execução de código se não houver erro de sintaxe. Agora, vamos modificar nosso código:
#! /BIN/BASH
eco "Enter Number1"
Leia o número1
eco "Enter Number2"
Leia o número2
Se ["$ número1" -gt "$ número2"]
então
eco "número1 é maior que o número2"
Elif ["$ número1" -eq "$ número2"]
#então
eco "número1 é igual a número2"
outro
eco "número2 é maior que o número1"
fi
Estou comentando "então" depois "Elif". Agora, com execução "-n" “B_Script.sh ” roteiro:
$ bash -n b_script.sh
Como previsto, ele identificou claramente o erro e o exibiu no terminal.
4 Como identificar as variáveis não definidas durante o script de depuração:
Fazer um erro de digitação ao escrever um código é comum. Freqüentemente, você visita uma variável, que não deixa o código executar. Para identificar esse erro, usamos o "-você" opção. Vamos modificar o código novamente:
#! /BIN/BASH
eco "Enter Number1"
Leia o número1
eco "Enter Number2"
Leia o número2
Se ["$ num1" -gt "$ número2"]
então
eco "número1 é maior que o número2"
Elif ["$ número1" -eq "$ número2"]
então
eco "número1 é igual a número2"
outro
eco "número2 é maior que o número1"
fi
Em primeiro "se" declaração condicional, eu renomeei o "número 1" variável para "Num1". Agora "Num1" é uma variável não definida. Agora execute o script:
$ bash -u b_script.sh
A saída identificou e exibe explicitamente o nome de uma variável não definida.
Como depurar a parte específica do script Bash:
O modo XTrace processa todas as linhas do código e fornece saída. No entanto, encontrar erros em um código grande seria demorado se já soubéssemos qual parte está potencialmente causando o erro. Felizmente, o Xtrace também permite depurar uma parte específica do código, que pode ser realizada usando o "definir" comando. Lugar "Set -x" no início da parte que precisa ser depurada e depois "Set +X" no final. Por exemplo, quero depurar as declarações condicionais de “B_Script.sh ”, Então, vou incluir todas as declarações condicionais em "Set -x" e "Set +X" Opções como mostrado no código abaixo:
#! /BIN/BASH
eco "Enter Number1"
Leia o número1
eco "Enter Number2"
Leia o número2
set -x
Se ["$ número" -gt "$ número2"]
então
eco "número1 é maior que o número2"
Elif ["$ número1" -eq "$ número2"]
então
eco "número1 é igual a número2"
outro
eco "número2 é maior que o número1"
fi
set +x
Agora, execute o script usando “Bash b_script.sh ”.
A saída está apenas depurando as condições IF, conforme especificado.
Como depurar um script Bash usando o comando "trap":
Se seu script for complicado, também existem mais técnicas elaborativas para a depuração. Um deles é o "armadilha" comando. O "armadilha" O comando pega os sinais e executa um comando quando uma situação específica ocorre. O comando pode ser um sinal ou uma função. Eu criei outro script pelo nome de “Sum_script.sh ”:
#! /BIN/BASH
TRAP 'Echo "Line $ lineno: o primeiro número é $ número1, o segundo número é $ número2 e a soma é $ sum"' Debug
eco "digite o primeiro número"
Leia o número1
eco "Digite o segundo número"
Leia o número2
soma = $ [número1 + número2]
eco "a soma é $ sum"
O "armadilha" comando com "DEPURAR" Sinal exibe o status das variáveis "número 1", "número 2" e "soma" Após a execução de cada linha, como mostrado na imagem de saída a seguir:
Os blocos amarelos são espaços em branco porque o usuário ainda não inseriu entrada; Esses espaços serão preenchidos à medida que o usuário insere valores. Este método também é bastante útil para depurar scripts de bash.
Como depurar um script Bash eliminando o Globbing de arquivos usando a opção "-f":
Globbing de arquivos é um processo de encontrar os arquivos com caracteres curinga, eu.e., "*" e ““?”. Em muitas situações, você não precisa expandir arquivos enquanto depura. Nesses casos, você pode bloquear o globbing de arquivos usando o "-F" opção. Vamos entender com um script “Fglobe_script.sh ”:
#! /BIN/BASH
eco "Exiba todos os arquivos de texto."
LS *.TXT
O código acima exibirá todos os arquivos de texto no diretório atual, execute:
$ Bash fglobe_script.sh
Para desligar o globbing de arquivos, use o "-F" opção:
$ bash -f fglobe_script.sh
Da mesma forma, você pode usá -lo com o shebang e com o "definir" comando também:
#! /BIN/BASH
eco "Exiba todos os arquivos de texto."
LS *.TXT
set -f
eco "Exiba todos os arquivos de texto"
LS *.TXT
set +f
Agora, corra “Bash fglobe_script.sh ”:
A parte fechada com “Set -f/set +f” Opções não processaram comandos com caracteres curinga.
Como combinar opções de depuração para depurar script de shell:
Usamos apenas uma opção nas técnicas de depuração acima mencionada, mas podemos combinar várias opções para uma melhor compreensão. Vamos implementar "-X" e "-V" opções para o “Sum_script.sh ” roteiro. Estou usando o “Sum_script.sh ” roteiro.
#! /BIN/BASH
eco "digite o primeiro número"
Leia o número1
eco "Digite o segundo número"
Leia o número2
soma = $ [número1 + número2]
eco "a soma é $ sum"
Agora execute:
$ bash -xv sum_script.sh
Ambos "-X" e "-V" As saídas são combinadas, conforme exibido na imagem de saída. Da mesma forma, também podemos combinar o "-você" opção com "-v" verbose para detecção de erro. Estou substituindo o "número 1" variável com "Num" Na sexta linha do script:
#! /BIN/BASH
é $ número2 e soma é $ sum "'Debug
eco "digite o primeiro número"
Leia o número1
eco "Digite o segundo número"
Leia o número2
soma = $ [num + número2]
eco "a soma é $ sum"
Para visualizar a saída, execute o comando abaixo mencionado:
$ bash -uv sum_script.sh
Como redirecionar o relato de depuração para um arquivo:
Salvar um relatório de depuração de um script bash em um arquivo pode ser útil em muitas situações. É um pouco complicado porque redirecionar o relatório de depuração para um arquivo; Usamos algumas variáveis especiais. Vamos implementá -lo em “B_Script.sh ” código:
#! /BIN/BASH
exec 5> dubug_report.registro
Bash_xtraced = "5"
Ps4 = '$ lineno--'
eco "Enter Number1"
Leia o número1
eco "Enter Number2"
Leia o número2
Se ["$ número" -gt "$ número2"]
então
eco "número1 é maior que o número2"
Elif ["$ número1" -eq "$ número2"]
então
eco "número1 é igual a número2"
outro
eco "número2 é maior que o número1"
fi
Na segunda linha do código, pode -se ver que estamos redirecionando a saída para um “Debug_report.registro" arquivo usando o “Exec” Comando com o Descritor de Arquivo 5 (FD5).
EXEC 5> Debug_report.registro: O “Exec” O comando está redirecionando tudo que está acontecendo no shell para um arquivo “Debug_report.registro.”
Bash_xtracefd = ”5”: É uma variável de bash em particular e não pode ser usada em qualquer outra concha. Ele precisa ser atribuído um descritor de arquivo válido e o Bash escreverá a saída extraída para “Debug_report.registro.”
Ps4 = '$ lineno- ': É também uma variável bash usada para imprimir o número da linha durante a depuração usando o modo Xtrace. O valor padrão do PS4 é o "+" sinal
O script acima está gerando um arquivo de log chamado “Debug_report.registro," Para lê -lo, use o "gato" comando:
Conclusão:
Um código cheio de bugs pode afetar o desempenho do programa e prejudicial ao hardware também. A depuração é muito crucial para todos os programas, pois torna o programa mais eficiente. Encontrar erros existentes e potenciais durante o desenvolvimento de um programa pode impedir que seu programa se comporte inesperadamente. Códigos grandes geralmente precisam de depuração ativa, aumentando a eficácia do código, eliminando o recurso que consome pedaços de código.
Muitas linguagens e ambientes de programação têm seus próprios depuradores de companheiro. Na script de bash, várias técnicas podem ser implementadas para depurar o script. Este guia focou completamente em todos os métodos que podem ser usados para encontrar bugs nos scripts do Bash. Portanto, sempre que você sentir que seu script bash não está se comportando como esperado, use qualquer uma das técnicas mencionadas acima, mas o modo XTrace (-x) é bastante útil na maioria dos casos.