O principal problema é que você está lendo $line
e, em seguida, usando $i
. Além disso, echo "bad"
não está no bloco else
, mas no normal. Então, será sempre impresso.
Você também pode precisar usar eval
:
while read line
do
eval "$line"
if [ $? -eq 0 ]; then
echo "good"
else
echo "bad"
fi
done < file1.txt
Observe também que é importante citar as variáveis como em eval "$line"
.