Pergunta

É possível verificar uma sintaxe script bash sem executá-lo?

Usando Perl, eu posso correr perl -c 'script name'. Existe algum comando equivalente para bash scripts?

Foi útil?

Solução

bash -n scriptname

Talvez uma ressalva óbvia: esta sintaxe valida, mas não irá verificar se sua festança tentativas de script para executar um comando que não está em seu caminho, como ech hello vez de echo hello

.

Outras dicas

O tempo muda tudo. Aqui está uma web site que fornece verificação de sintaxe on-line para shell script.

Eu encontrei é muito poderosa detecção de erros comuns.

enter descrição da imagem aqui

Sobre ShellCheck

ShellCheck é uma análise estática e linting ferramenta para scripts sh / bash. É focado principalmente na manipulação iniciante típica e erros de sintaxe de nível intermediário e armadilhas, onde o shell só dá uma mensagem de erro enigmática ou comportamento estranho, mas também relatórios sobre algumas questões mais avançadas, onde casos de canto podem causar falhas em atraso.

código fonte Haskell está disponível no GitHub!

Eu também ativar a opção 'u' em cada festa roteiro de gravação I, a fim de fazer alguma verificação adicional:

set -u 

Isto irá relatar o uso de variáveis ??não inicializadas, como na seguinte script 'check_init.sh'

#!/bin/sh
set -u
message=hello
echo $mesage

A execução do script:

$ check_init.sh

comunicará o seguinte:

./ check_init.sh [4]: ??mesage:. Parâmetro não definido

Muito útil para erros de captura

sh  -n   script-name 

Executar este. Se houver algum erro de sintaxe no script, em seguida, ele retorna a mesma mensagem de erro. Se não houver erros, então ele sai sem dar qualquer mensagem. Você pode verificar imediatamente usando echo $?, que retornará 0 confirmando bem sucedido sem qualquer erro.

Ela trabalhou para mim também. Corri em Linux OS, Bash Shell.

Eu realmente verificar todos os scripts bash em dir atual para erros de sintaxe, sem correr-los usando a ferramenta find:

Exemplo:

find . -name '*.sh' -exec bash -n {} \;

Se você quiser usá-lo para um único arquivo, basta editar o curinga com o nome do arquivo.

comando nulo [cólon] também útil durante a depuração para ver o valor da variável

set -x
for i in {1..10}; do
    let i=i+1
    : i=$i
done
set - 

BashSupport plug-in para IntelliJ IDEA que verifica a sintaxe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top