#!/bin/bash ###################################### #### Default Vars #################### ###################################### user_groups="" default_groups=(users disk network floppy fuse video lp tty audio cdrom halusers scanner admin) # 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 [ ] Si 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éé. 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