Скрипт очень простой (кроме рег. выр.) и расчитан на новичков. Суть работы проста. Делаем текстовый файл, где 1 колонка "имя пользователя/машины", 2 "uid", 3 "gid". У машин не создается кат. пользователя и ни у кого не создается shell. Пароли тоже не определяются. Я его не запускал на исполнение так как сейчас нет машины с самбой. Но все строки команд проверил echo-м.Это скрипт:
#*********************************
if [ $# -ge 1 ]
then
cat $1|while read name uid gid; do
#С помоъю регулярного выр. определяем тип записи
#пользовательская или машинная
perem=`expr $name : '.*\$$'`
if [ $perem -ge 1 ]
then
echo "Добавляю машинную запись"
pw useradd -n $name -u $uid -d /nonexisten -g $gid -s/sbin/nologin
smbpasswd -a -m -N $name
else
echo "Добавляю пользовательскую запись"
pw useradd -n $name -u $uid -d /home/$name -g $gid -s/sbin/nologin
smbpasswd -a -N $name
fi
smbpasswd -e $name
done
exit 0
else
echo "Для работы нужен параметр имя файла"
exit 1
fi
#*********************************
Это файл с пользователями:
#*********************************
gnom$ 2001 1010
guest 1004 1008
hrom$ 2002 1010
#*********************************Будьте внимательны в файле с пользователями не должно быть "лишних" строк и в конце файла должен стоять символ окончания строки иначе эта запись не добавится.
Вот!
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: Да не примут это за наезд на автора, но за руководству к действию по улучшению скрипта, ибо нет предела совершенству...
Принято. Кроме того сейчас уже и баги обнаружил. Вместо -N в smbpasswd надо делать -n. Буду пытаться улучшить.