In the "traps for new players" category:
count=0
things="0 1 0 0 1"
for i in $things;
do
if [ $i == "1" ]; then
(( count++ ))
fi
done
echo "Count is ${count}"
Looks fine? I've probably written this many times. There's a small gotcha:
- ((expression))
- The expression is evaluated according to the rules described below under ARITHMETIC EVALUATION. If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1. This is exactly equivalent to let "expression".
When you run this script with -e or enable errexit -- probably because the script has become too big to be reliable without it -- count++ is going to return 0 (post-increment) and per above stop the script. A definite trap to watch out for!