mkuser.sh: validate input and wire up user removal

Check username format and existence before adding or deleting, fix the
Arch default group list, remove the debug pause, and make menu option 2
call Remove_user.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-29 14:22:37 -04:00
co-authored by Claude Opus 5.5
parent 4119fb01d7
commit 6064b6842d
+35 -10
View File
@@ -8,6 +8,16 @@ Create_user(){
echo -n "Username: "
read -r uname
if [[ ! "${uname}" =~ ^[a-z_][a-z0-9_-]*[$]?$ ]]; then
echo "Error: Invalid username format (use lowercase letters, numbers, hyphens, underscores)"
return 1
fi
if id "${uname}" >/dev/null 2>&1; then
echo "Error: User '${uname}' already exists"
return 1
fi
echo "Additional Groups: "
echo
echo "[1] - Arch Linux Defaults"
@@ -16,18 +26,19 @@ Create_user(){
read -r dgroups
if [ "${dgroups}" = "1" ];then
addgroups="power, wheel, optical network, video, audio, storage"
addgroups="power,wheel,optical,network,video,audio,storage"
elif [ "${dgroups}" = "2" ];then
addgroups="disk,wheel,storage,audio,video,optical,lp,network,dbus,xbuilder"
elif [ "${dgroups}" = "3" ];then
echo -n "Enter desired groups (comma separated): "
read -r custgroups
addgroups="${custgroups}"
else
addgroups=""
fi
echo "${addgroups}"
read -r -n 1 -p "wait"
useradd -m -g users -G "${addgroups}" -s /bin/bash "${uname}"
passwd "${uname}"
passwd "${uname}"
echo
if [ -d /home/"${uname}" ];then
@@ -42,11 +53,22 @@ Remove_user(){
echo -n "Username to delete: "
read -r duser
userdel ${duser}
if [ -d /home/${duser} ];then
rm -R /home/${duser}
if [[ ! "${duser}" =~ ^[a-z_][a-z0-9_-]*[$]?$ ]]; then
echo "Error: Invalid username format"
return 1
fi
if ! id "${duser}" >/dev/null 2>&1; then
echo "Error: User '${duser}' does not exist"
return 1
fi
userdel "${duser}"
if [ ! -d /home/"${duser}" ];then
echo "User ${duser} deleted"
else
echo "User deletion failed"
rm -R /home/"${duser}"
echo "User ${duser} deleted"
fi
}
main(){
@@ -64,10 +86,13 @@ main(){
if [ "${choice}" = "1" ];then
Create_user
elif [ "${choice}" = "2" ];then
Remove_user
else
echo "no"
echo "Invalid option"
fi
done
read -r -n 1 -p "Press any key to continue..."
done
}
case "$1" in