Você pode usar find
e awk
para verificar a primeira linha (seu awk precisa suportar FNR, como fazem os POSIX awks) e adicionar alguns padrões de pesquisa para localizar (como excluir pastas ocultas):
echo "check bash files ..."
find . -not -path '*/\.*' \
-type f -exec awk 'FNR == 1 && /^#!.*sh/{print FILENAME}' {} + | \
while IFS= read -r f; do
echo "checking $f ..."
bash -n "$f"
done
Nota: use IFS=
para evitar a divisão de nomes de arquivos contendo um dos $IFS
, por exemplo: 'a b'