Você não precisa ler as linhas com for . A maneira correta de fazer isso é usar while com read . O read builtin pode analisar automaticamente os campos por linha se eles estiverem separados por espaço em branco (espaços e tabulações). A opção -r garante que as barras invertidas não sejam interpretadas durante a leitura:
while read -r user password id; do
# strip the @domain part from username
user="${user%%@*}"
useradd "$user" -d "/home/$user" -m
echo "$user:$password" | chpasswd
# and so on
done < your_input_file
Observe também que você não deve usar variáveis em maiúsculas. $USER já está reservado para seu nome de usuário.