Imagino que vc poderia usar o "awk" pra dividir a linha de entrada (ou o "cut", se não se importar em repetir o mesmo comando várias vezes). Infelizmente nunca aprendi a usar o awk direito. Mas com o cut sei fazer:
for i in `cat user.txt`
do
username=`cut -d':' -f1 $i`
fullname=`cut -d':' -f2 $i`
useradd -m -p '123456qwerty' -c "$fullname" username
(echo 123456; echo 123456) | smbpasswd -s -a $username
done
O arquivo user.txt ficaria assim:
fulano:Fulano de Tal
beltrano:Beltrano da Silva
sicrano:Sicrano de Souza
Se bem que provavelmente a partir do momento em que o arquivo de entrada passasse a ter espaços, vc precisaria de outra forma de lê-lo linha por linha, que não o "for i in `cat arquivo`".