The following link recommends against using loops in shells.
bash variables in for loop range
Why is this? Here is an example loop I just happened to be looking at when I came across that answer:
find /etc/postinstall -name '*.sh' | while read script
do
echo Running $script ...
$script
mv $script $script.done
done