To nie jest proste zadanie do zautomatyzowania, ponieważ skrypt może wykorzystywać konstrukty, które pokonują analizę statyczną. Jeśli kiedykolwiek użyje eval
jakiegokolwiek prefiksu, takiego jak time
lub nice
, nie będzie tak proste, jak uruchomienie czegoś takiego jak egrep -o '^[^ ]+ ? '
uzyskanie poleceń i uruchomienie ich za pomocą which
lub type
.
Ostatecznie jedynym sposobem na absolutną pewność jest uruchomienie skryptu i sprawdzenie, co się nie powiedzie. Jeśli skrypt jest dobrze napisany, przed uruchomieniem sprawdzi niestandardowe polecenia. Jeśli nie, jedyną drogą do pewności jest próba i błąd.
Powiedziawszy to, coś takiego może pomóc:
#!/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
Dane wyjściowe będą wyglądać następująco:
$ ./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