There are several things wrong with this script:
- FILESis not an array.
- Never use the output of lsprogrammatically.
- FILEand- Fileare two different variables; names are case-sensitive.
- All-uppercase names are reserved for use by the shell.
Your code should be
files=( *txt )  # ( *.txt ) would probably be cleaner
for file in "${files[@]}"; do
  echo "$file"
done
Be aware, though, that depending on your shell settings, the assignment to files can have three different outcomes if there are no matching files:
- filescould contain a single element, literally- *txt(the default)
- filescould be empty (with- nullglobset)
- The pattern match could produce an error (with failglobset)