1) Для борьбы с лишними строками, пустыми или содержащими только комментарий) нужно вместо `cat $1' использовать 'grep . $1' или 'grep -v "^$" $1' (что по сути одно и то же).
2) Вместо 'if', запускающего процесс, лучше использовать 'case', как это сделано во FreeBSD в файлах "/etc/rc*".
3) 'smbpasswd' умеет сам добавлять юзеров в систему, если ему прописАть параметр "скрипт добавления юзера" (не помню, как это по английски - см.'man smb.conf'); т.е. можно обойтись без 'pw ...' (хотя это спорно).
4) При наличии пароля в файле с пользователями этот пароль должен передаваться в 'smbpasswd' для задания его юзеру; есть вариант, что этот же пароль должен задаваться и в системе (для POP3-почты и т.п.). Для этого есть "скрипт установки пароля".
5) Хорошо бы не задавать каждому юзеру UID и GID, а указать один раз константу или диапазон.
6) 'echo "Для работы нужен параметр имя файла"' неправильно: скрипт должен брать данные из stdin, как это делают cat, grep, sed и прочие программы.
PS: Да не примут это за наезд на автора, но за руководству к действию по улучшению скрипта, ибо нет предела совершенству...