I think I should clarify a bit more.
Unlike the while+read combination, a for loop can't directly accept input from stdin, which is why a file redirect alone doesn't work (although you can redirect stdout from it
to a file). It simply processes a list of "words", either whatever follows "in" on the line, or the "$@" parameters if you don't specify anything.
What's considered a "word" separator is of course determined by your IFS shell variable. This is space+tab+newline by default. So in the above example changing it to newline means spaces and tabs will be ignored, and each "word" will actually be a whole line.
Anyway, to feed the loop you have to first build your word list somehow and insert it where for can read them. In the above I used process substitution. And now that I think about it, here's another way that uses an array instead, along with bash version 4's new mapfile built-in.
Code:
mapfile -t mtarr </etc/mtab
for Fsckit in "${mtarr[@]}" ; do ...
No need to worry about IFS or subshells here, since mapfile works on a per-line basis like read.