2011-03-21 25 views
6

¿Alguien puede explicar cómo probar un script de shell bash?Prueba de un script de shell bash

Por ejemplo tengo un archivo .sh con este código en él ...

#!/bin/sh 

for file in *.txt; do 
    mv "$file" "`basename $file .txt`.doc" 
done 

¿Cómo se escribe una prueba para ello? Al igual que en Java, tienes pruebas unitarias donde escribes código como assertEquals para probar que el código da el resultado deseado.

+0

verificación de estos -> http://stackoverflow.com/questions/1315624/bash-and-test-driven-development, http://stackoverflow.com/questions/1339416/testing-bash-scripts – Chaitanya

+0

guiones bash probados por unidad. Bonito. :) –

+0

Esto es mejor: 'mv" $ file "" $ (basename "$ file" .txt) .doc "' or 'mv" $ file "" $ {file% *. Txt} .doc "' –

Respuesta

3

Agregaría un echo delante del mv para verificar que se están creando los comandos correctos, para empezar. (Siempre es una buena idea con los comandos que hacen que posiblemente difícil de deshacer los cambios.)

Algunos recursos posiblemente útiles:

+0

Bien , Gracias. Pero estoy tratando de crear un archivo .sh que pruebe todo el código. –

+0

@Mr Teeth: agregué algunos enlaces arriba. Dicho esto, los guiones de shell son un poco más difíciles de probar de forma efectiva porque casi todo se reduce a invocar comandos externos. Es casi más sensato y útil probar esos comandos y, como resultado, probar el guión eliminando modificaciones externas con 'echo'. – geekosaur

7

Puedes hacer afirmaciones en Bash. Echa un vistazo a esto desde la Guía avanzada Bash-Scripting:

http://tldp.org/LDP/abs/html/debugging.html#ASSERT

+1

Por favor, no anime el ABS como referencia, como regla, está bajo mantenimiento, y tiene el hábito de mostrar ejemplos de malas prácticas. El wiki de Wooledge y el wiki de bash-hackers (y por supuesto el manual oficial) son * mucho * mejores recursos. –

-1
#!/bin/sh 
for file in *.txt; do 
    echo mv "$file" "`basename $file .txt`.doc" 
done 
2

Trate de hacer esto: assert.sh

source "./assert.sh" 

local expected actual 
expected="Hello" 
actual="World!" 
assert_eq "$expected" "$actual" "not equivalent!" 
# => x Hello == World :: not equivalent! 
Cuestiones relacionadas