Это не простая задача для автоматизации, потому что сценарий может использовать конструкции, которые побеждают статический анализ. Если он когда-либо использует eval
или какой-либо префикс, такой как time
или nice
, это будет не так просто, как запустить что-то вроде egrep -o '^[^ ]+ ? '
получения команд и выполнить их через which
или type
.
В конце концов, единственный способ быть абсолютно уверенным - запустить скрипт и выяснить, что не получается. Если скрипт хорошо написан, он будет проверять наличие нестандартных команд перед запуском. Если нет, то метод проб и ошибок - единственный способ быть уверенным.
Сказав это, что-то вроде этого может помочь:
#!/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
Вывод будет выглядеть так:
$ ./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