Esta no es una tarea simple de automatizar, porque un script puede usar construcciones que derrotan el análisis estático. Si alguna vez usa eval
o algún prefijo como time
o nice
, no será tan simple como ejecutar algo como egrep -o '^[^ ]+ ? '
obtener comandos y ejecutarlos a través de which
o type
.
Al final, la única forma de estar absolutamente seguro es ejecutar el script y descubrir qué falla. Si un script está bien escrito, buscará comandos no estándar antes de ejecutarlo. Si no, prueba y error es la única forma de estar seguro.
Dicho esto, algo como esto podría ayudar:
#!/bin/bash
egrep -o -e '^[^ ]+ ? ' -e '[a-zA-Z0-9]+' "$1" | sort -u | {
while read line
do
if type $line &>/dev/null
then
echo "$line found"
else
echo "Error: $line not found"
fi
done
} | sort
La salida se verá así:
$ ./check i_wonder.sh
cd found
echo found
elif found
else found
Error: abort not found
Error: checkurl not found
Error: cleanup not found
Error: count not found
Error: debug not found
Error: deleteFile not found
Error: die not found
find found
for found
grep found
if found
mv found
readarray found
rm found
shopt found
size found
sleep found
stat found
trap found
unset found
while found