Đây không phải là một nhiệm vụ đơn giản để tự động hóa, bởi vì một tập lệnh có thể sử dụng các cấu trúc đánh bại phân tích tĩnh. Nếu nó từng sử dụng eval
hoặc bất kỳ tiền tố nào như time
hoặc nice
, nó sẽ không đơn giản như chạy một cái gì đó như egrep -o '^[^ ]+ ? '
để nhận lệnh và chạy chúng thông qua which
hoặc type
.
Cuối cùng, cách duy nhất để hoàn toàn chắc chắn là chạy tập lệnh và tìm ra những gì thất bại. Nếu một tập lệnh được viết tốt, nó sẽ kiểm tra các lệnh không chuẩn trước khi chạy. Nếu không, thử và sai là cách duy nhất để chắc chắn.
Đã nói rằng, một cái gì đó như thế này có thể giúp:
#!/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
Đầu ra sẽ như sau:
$ ./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