2011-08-22 18 views
5

¿Cómo comprobar la exactitud de la sintaxis contenida en el script de shell ksh sin ejecutarlo? Para hacer mi punto claro: en Perl podemos ejecutar el comando:Script de shell: compruebe la sintaxis

perl -c test_script.pl 

para comprobar la sintaxis. ¿Hay algo similar a esto disponible en ksh?

Respuesta

4

ksh -n

La mayor parte de la familia Borne Shell acepta -n. tcsh también.

+0

Parece que no funciona. Ejecuté ksh -n test.sh pero no enlisté el error de sintaxis que estaba allí en test.sh – sachin

+0

Sí, funciona. Estoy seguro de que no hay ningún error de sintaxis. Si nos muestra el guión, podemos analizar si sus expectativas de encontrar un error de sintaxis son correctas. – Jens

+1

Luego prueba con 'sh -n script'. Deberia de funcionar. Sin embargo, si su error de sintaxis está en un nombre de comando inválido, solo quedaría atrapado en tiempo de ejecución. 'sh -n' solo verifica la sintaxis real del shell. – tripleee

1

hice una pequeña prueba con el siguiente código:

#!/bin/bash 
if [ -f "buggyScript.sh" ; then 
    echo "found this buggy script" 
fi 

Nota los desaparecidos] en el caso. Ahora ingresé

bash -n buggyScript.sh 

y la falta] no se detectó.

El segundo script de prueba era la siguiente:

#!/bin/bash 
if [ -f "buggyScript.sh" ]; then 
    echo "found this buggy script" 

Nota del fi que falta en al final del caso. Prueba de esto con

bash -n buggyScript.sh 

regresaron

buggyScript.sh: line 5: syntax error: unexpected end of file 

Conclusión: Prueba el guión con la opción n detecta algunos errores, pero de ninguna manera todos ellos. Así que supongo que realmente encuentras todos los errores solo mientras ejecutas el script.

1

Las pruebas que usted dice no detectaron errores de sintaxis, donde de hecho no hay errores de sintaxis ... echo es un comando (OK un comando incorporado, pero sigue siendo un comando) entonces ksh/bash no van a verificar la ortografía/sintaxis de tu comando. De forma similar, "[" es efectivamente un alias para el comando de prueba, y el comando espera que el corchete de cierre "]" sea parte de su sintaxis, no ksh/bash's. ¡Así que hace lo que dice en la lata, simplemente no ha leído la lata correctamente! :-)