#!/bin/bash ###################################### #### Default Vars #################### ###################################### user_groups="" default_groups=(users disk network floppy fuse video lp audio cdrom halusers scanner) # Avoid spaces troubles :) OLD_IFS=$IFS IFS="| " ###################################### #### Functions ####################### ###################################### check_args() { description="$1" name="$2" name_test=`echo -n "$name" | sed 's@^[a-z][a-z0-9]*$@@g'` if [ "$name_test" != "" ]; then echo 1>&2 "CRITICAL - Le nom contient des caractères interdits: Il doit commencer par une lettre uniquement et ne peut contenir que des minuscules et des chiffres " return 1 fi if grep "$name" /etc/passwd > /dev/null; then echo 1>&2 "Le nom $name existe deja!" return 2 fi desc_test=`echo "$description" | sed 's@^[[:alnum:]! -.,~_@;%<>?]*$@@ig'` if [ "$desc_test" != "" ]; then echo 1>&2 "CRITICAL - La description contient des caractères interdits: Elle ne peut contenir que des lettres/chiffres et les caractères suivants ! -.,~_\\\@;%<>? " return 3 fi return 0 } usage() { echo 1>&2 'USAGE: nu [<description> <nomutilisateur>] Si <nomutilisateur> existe déjà, un message sera envoye sur le terminal, dans ce cas, aucun changement ne sera fait, et aucun nouveau compte ne sera créé. <description> doit être valide pour le champ du fichier /etc/passwd description Ce qui veut dire que ce champ ne doit pas contenir de ":". ' exit 1 } ###################################### #### Scripting time ################## ###################################### if [ $# -eq 1 -o $# -gt 2 ]; then usage fi if [ $UID -ne 0 ]; then echo 1>&2 "Veuillez exécuter cette commande en root" exit 1; fi if [ $# -lt 2 ]; then echo -n "Nom de l'utilisateur: " read name echo -n "Description de l'utilisateur: " read description else description="$1" name="$2" fi check_args "$description" "$name" ret=$? while [ $ret -ne 0 ]; do if [ $ret -lt 3 ]; then echo -n "Nom de l'utilisateur: " read name fi if [ $ret -eq 3 ]; then echo -n "Description de l'utilisateur: " read description fi if [ "$name" == "!stop!" -o "$description" == "!stop!" ]; then exit 1 fi check_args "$description" "$name" ret=$? done i=0 while [ -n "${default_groups[i]}" ]; do if grep "${default_groups[i]}" /etc/group > /dev/null ; then if [ -z "$user_groups" ]; then user_groups="${default_groups[i]}" else user_groups="$user_groups,${default_groups[i]}" fi # echo "groupes : $user_groups" # else # echo 1>&2 ' Veuillez installez un gestionnaire de fenetre, # redemarrer la machine dans ce gestionnaire, # et relancer cette commande. #' # exit 1 fi i=$((i+1)) done echo 1>&2 " Création de $name. " # echo "/usr/sbin/useradd -c ${description} $user_groups -m ${name}" if [ -z "$user_groups" ]; then /usr/sbin/useradd -c "${description}" -m "${name}" || exit 1 else /usr/sbin/useradd -c "${description}" -G "$user_groups" -m "${name}" || exit 1 fi passwd "$name" exit 0