Мне нужна помощь с проектом GCSE, я застрял на последнем вопросе. Он запрашивает bash-скрипт для создания пользователей, а затем назначает их группам. Я уже заставил скрипт добавлять новых пользователей, но я не уверен, как добавить их в группы в скрипте bash (скрипт bash сделан с nano
).
Любая помощь / примеры?
Мой текущий сценарий:
#!/bin/bash
# Script to add a user to Linux system
if [ $(id -u) -eq 0 ]; then
read -p "Enter username : " username
read -p "Enter password : " password
egrep "^$username" /etc/passwd >/dev/null
if [ $? -eq 0 ]; then
echo "$username exists!"
exit 1
else
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
useradd -m -p $pass $username
[ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
fi
else
echo "Only root may add a user to the system"
exit 2
fi
(выглядит примерно так)
Можно использовать этот измененный сценарий:
#!/bin/bash
# Script to add a user to Linux system
if [ "$(id -u)" -eq 0 ]; then
read -p "Enter username : " username
read -p "Enter password : " password
IFS=' ' read -a grps -p "Enter group names : "
if grep "^${username}:" /etc/passwd &>/dev/null; then
echo "$username exists!"
exit 1
else
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
if useradd -m -p "$pass" "$username" &>/dev/null; then
echo "User has been added to system!"
for grp in "${grps[@]}"; do
usermod -a -G "$grp" "$username" && echo "User is added to group $grp" \
|| echo "Failed to add user to group $grp"
done
else
echo "Failed to add a user!"
fi
fi
else
echo "Only root may add a user to the system"
exit 2
fi
Обратите внимание, что необходимо всегда заключать переменные в кавычки.
Здесь я добавил главным образом две вещи:
IFS=' ' read -a grps -p "Enter group names : "
попросит базироваться для предоставления разделенных названий группы пространства, к которым недавно созданный пользователь будет членом
Затем это короткое for
цикл по значениям массива grps
:
for grp in "${grps[@]}"; do
usermod -a -G "$grp" "$username" && echo "User is added to group $grp" \
|| echo "Failed to add user to group $grp"
done
Учитывая группы уже существуют. Если не можно использовать groupadd
создать группу и затем добавить пользователя к той группе.
Здесь мы использовали usermod
чтобы добавить пользователя к существующей группе, эти группы будут дополнительными группами для пользователя.
Проверить man usermod
для деталей.
Обратите внимание, что Вы не должны использовать egrep
, это удерживается от использования в пользу grep -E
. На самом деле в этом случае Вам не нужно grep -E
.
Ваш grep
шаблон перестанет работать в определенных случаях, например, если у Вас есть пользователь foobar
и Вы добавляете, что новый пользователь назвал foo
. Для преодоления этого соответствуйте имени пользователя, сопровождаемому a :
(учитывая никакое имя пользователя имеет :
) :
grep "^${username}:" /etc/passwd &>/dev/null
Также отправьте STDERR в /dev/null
также.
Это может быть упрощено как:
if grep "^${username}:" /etc/passwd &>/dev/null; then
echo "$username exists!"
exit 1
else ......
Также следующее if
оператор с useradd
может следовать за этим.
** Также некоторые другие улучшения могут быть сделаны к Вашему текущему сценарию, который не поместился бы в этот контекст.