TP2 scripts BASH (corrigés)


  1. Script de création automatique d'un groupe d'utilisateurs
  2. pour un groupe d'utilisateurs, avec génération de mots de passe standard LINUX + SAMBA
    #!/bin/bash
    # SCRIPT creer1.sh
    # ================
    # création d'un ensemble de comptes construits 
    # avec un nom generique suivi d'un numero
    # génération automatique de mot de passe Linux et Samba
    # =====================================================
    echo Donnez un nom de connexion générique
    read nom
    echo "Donnez le nom du groupe (par défaut $nom)"
    read groupe
    if [ -z $groupe ]
    then
    groupe=$nom
    fi
    
    # le groupe existe t-il ? si oui, création impossible
    echo "Création du groupe $groupe"
    echo "=========================="
    groupadd $groupe
    if [ $? -ne 0 ] 
    then
    echo "Création du groupe impossible FIN"
    exit 1
    else
    echo "Création du groupe $groupe " >>creer.txt
    # pour trouver le numero gid du groupe, pas necessaire
    # gr=`grep $groupe /etc/group | cut -d ":" -f3`
    # echo "numero du groupe primaire $groupe : $gr "
    fi
    
    # saisie du mot de passe
    # le mot de passe par défaut est fabriqué avec les 3 premières lettres
    # suivies du numéro de l'utilisateur
    motpasse=$(echo $nom | cut -c1-3) 
    echo "Donnez un mot de passe générique (par défaut $motpasse)"
    read mdp
    if [ -z $mdp ]
    then
    mdp=$motpasse
    fi
    
    # saisie des numeros
    echo numero mini
    read mini
    echo numero maxi
    read maxi
    
    # création des comptes Samba ?
    echo "Création (aussi) des comptes Samba ? (o/n)"
    read rep
    if [ $rep = "o" -o $rep="O" ]
    then
    smb="0"
    fi 
    
    echo "Création des comptes $nom$mini a $nom$maxi"
    echo "==========================================="
    # declarer i variable de type entier (obligatoire)
    declare -i i
    i=$mini
    while [ $i -le $maxi ]
    do
     nomuser="$nom$i"
     motpasse="$mdp$i"
     # création du compte Linux 
     useradd -G $groupe $nom$i
     echo $motpasse | (passwd --stdin $nomuser)
     
     # création du compte Samba avec le meme mot de passe
     if [ $smb = 0 ]
     then 
      smbpasswd -a $nomuser $motpasse 
     fi
     # affichage du compte-rendu 
     uid=$(grep $nomuser /etc/passwd | cut -d: -f3)
     echo "compte Linux $nomuser ---> créé avec le numéro $uid et le mot de passe $motpasse"
     if [ $smb = 0 ]
     then
     echo "		compte SAMBA $nomuser ---> créé avec le mot de passe $motpasse"
     fi
     # ajout dans le fichier de log creer.txt
     echo "compte Linux $nomuser / uid = $uid / passwd = $motpasse, créé le $(date)" >> creer.txt
     if [ $smb = 0 ]
     then
     echo "	& SAMBA $nomuser / $motpasse, créé le $(date)" >> creer.txt
     fi
     # au suivant ! 
     i=$i+1
    done
    echo "----------------------------------------------" >>creer.txt
    


  3. Script de suppression du groupe
  4. #!/bin/bash
    # SCRIPT supprimer1.sh
    # ====================
    # saisie du nom générique du groupe à supprimer
    echo "Donnez le nom du groupe de comptes a supprimer"
    read groupe
    if [ -z $groupe ]
    then
    echo "Donnez un nom de groupe valide !"
    exit 1
    fi
    
    # vérification : ce groupe existe t-il ?
    # rappel : \b pour éviter que $groupe soit seulement le début du nom d'un groupe
    if ! grep "^$groupe\b" /etc/group
    then 
     echo "ce groupe n'existe pas ... fin"
    exit 1
    fi
    
    echo "Suppression des comptes de $groupe"
    echo "=================================="
    liste=$(grep "^$groupe" /etc/passwd | cut -d ":" -f1)
    echo "Liste des comptes à supprimer : "
    echo $liste
    # attention !  ne pas ecrire "$liste" ! pourquoi ?? 
    set -- $liste
    for nom in "$@"
    do 
     if userdel -r $nom
     then
     echo "suppression de $nom"
    # pour enregistrer les comptes effectivement supprimes dans un fichier 
     echo "$nom est supprimé le $(date)" >>suppr.txt
     fi
    done
    #  y a t-il encore un compte du groupe ?
    if [ ! -e "/home/$nom"* ]
    then 
    echo "Le groupe est vide ; suppression du groupe (o/n) ?"
    read rep
    if [ $rep = "o" -o $rep = "O" ]
        then
        groupdel $groupe
        echo "Le groupe $groupe est supprimé le $(date)" >>suppr.txt
    fi
    fi
    echo "-------------------------------------------" >>suppr.txt
     


  5. Créer des comptes décrits dans un fichier : creer2.sh
  6. #!/bin/bash
    # SCRIPT creer2.sh
    # ================
    # Création automatique des comptes d'apres le fichier users.txt
    # appel : ./creer2.sh [users.txt] 
    
    # analyse de la ligne de commande
    # a t-on passe un parametre ?
    if [ $# = 1 ] 
    then
       fichier=$1
    else
       echo "Nom du fichier des comptes Linux a creer [par defaut users.txt]"
       read fichier
       if [ -z $fichier ]
       then
         fichier="users.txt"
         echo "Utilisation du fichier $fichier pour genener les comptes"
       fi
    fi   
    # le fichier $fichier existe t-il ? si non, sortie du script par exit 1
    if [ ! -e $fichier ]
    then
         echo "Le fichier $fichier n'existe pas ! Verifiez !"
         exit 1
    fi    
    
    # Lecture une par une des lignes de $fichier
    cat $fichier | while true
    do
       read ligne
    # c'est la fin du fichier --> sortie brutale de la boucle
       if [ "$ligne" = "" ]
       then
       break
       fi
    # Traitement de la ligne (attention pas de " " autour de $ligne)
    # on "eclate" la ligne en affectant les variables de position
       set -- $ligne
       login=$1
       mdp=$2
       nom=$3
       groupe=$4
       echo $login $passwd $groupe $nom
    # existe t-il un sous-rep au nom $login dans /home/ ?
       if [ -d "/home/$login" ]
       then 
         echo "Le compte $login existe deja ! "  
    # on cree le compte avec $groupe comme groupe primaire
       else
        useradd -G $groupe $login 
        echo $mdp | (passwd --stdin $login)
        smbpasswd -a $login $mdp
        uid=$(grep -w "^$login" /etc/passwd | cut -d: -f3)
        echo "creation de $login / uid = $uid / passwd = $mdp"	
        echo "creation de $login / uid = $uid / passwd = $mdp, cree le $(date)" >>creer.txt
       fi
    done   
    # fin boucle de creation
    echo "----------------------------------------------" >>creer.txt