Gestión Usuarios Básica

Nombre: Gestión Usuarios Básica
Autor: Alejandro Alcalde Barros (algui91)
Origen: Un ejercicio de clase
Lenguaje: Bash
Licencia: https://www.safecreative.org/work/1005066212946
Propósito: Gestionar los usuarios y grupos de una manera grafica
Dependencias: sudo, gksudo, zenity

Código:

#!/bin/bash
sleep 1
echo
echo "*****************************************************************************"
echo "*                                                                           *"
echo "* Script para gestionar usuarios a traves de un GUI    >> GESTUSERS <<      *"
echo "*                                                                           *"
echo "* Fecha y hora de la ejecución del Script                                   *"
echo "* `date +%d-%m-%Y`   -   `date +%H:%M:%S`                                   *"
echo "*                                                                           *"
echo "* Puedes modificarlo y/o distribuirlo bajo los términos de la licencia GPL  *"
echo "*                                                                           *"
echo "* Autor: Alejandro Alcalde Barros (algui91) - Mar. '10                      *"
echo "*                                                                           *"
echo "*****************************************************************************"
sleep 1
function main(){
   while [ true ]
   do
      opcion=`zenity --list --height=300 --radiolist \
                --title="Elija una opcion" \
                  --column="" --column="Opcion" \
                 "FALSE" "1 Crear Usuario con home" \
                "TRUE" "2 Crear grupo" \
                  "FALSE" "3 Añadir usuario/Grupo" \
                  "FALSE" "4 Eliminar Usuario/Grupo" \
                 "FALSE" "5 Eliminar Usuario" \
                 "FALSE" "6 Mostrar usuarios de un grupo" \
                "FALSE" "7 Salir"`
      if [ "$?" == 1 ] ; then seleccion 7 ; fi #Si se pulsa cancelar y cerrar, lo evio al log
      seleccion `echo $opcion | cut -c 1` "$opcion" # Corto la opcion para quedarme solo con el numeros
   done
}
###################################################################################
function seleccion(){
   case $1 in
   1)
      user=`zenity --entry --width=300 --text "Nombre del usuario" --title "$2"`
      cod=`echo $?`
      if [ $cod == 0 ] #Pulso aceptar o cerrar
      then
         sudo adduser $user
         if [ "$?" == 1 ] # si la salida de adduser es 1, es que el usuario existe
         then
            zenity --warning --title="AddUser" --text="El usuario $user ya existe"
         else
            echo "creo el usuario $user" >> /tmp/log      #Almaceno las operaciones del usuario
            progress "Creando usuario" $user "$2"
         fi
      elif [ $cod == -1 ] #Error
      then
         zenity --error --no-wrap --title="Error" --text="Ocurrio un error"
      fi  
      ;;
   2)
      group=`zenity --entry --width=300 --text "Nombre del grupo" --title "$2"` #Recogo el nombre del nuevo grupo
      cod=`echo $?`
      if [ $cod == 0 ] #Pulso aceptar o cerrar
      then
         creargrupo "$group" #llamo a mi funcion crear grupo
         if [ "$?" == 0 ] # si creargrupo devuevle 0, todo correcto
         then
            progress "Creando grupo" $group "$2"
            echo "creo el grupo $group" >> /tmp/log
         fi
      elif [ $cod == -1 ] #Error
      then
         zenity --error --no-wrap --title="Error" --text="Ocurrio un error"
      fi
      ;;
   3)
      listaUser=`cat /etc/passwd | cut -d: -f1 | sort` #extraigo del archivo passwd una lista de los usuarios ordenada
      user=`zenity --list --height=300 --title="Elija un usuario" --column="USER" $listaUser` #Meto los usuarios en el list
      cod=`echo $?`
      if [ $cod == 0 ] #Pulso Aceptar
      then
         lsgrp=`cat /etc/group | cut -d: -f1 | sort`
         grp=`zenity --list --height=300 --title="Elija un grupo" --column="GRUPOS" $lsgrp`
         sudo usermod -aG $grp $user # -a de append, que no lo quite de su anterior grupo, y -G para agregarlo a otro grupo como secundario
         zenity --info --no-wrap --title="$2" --text="Añadió a \'$user\' al grupo $grp"
         echo "Añadió a $user al grupo $grp" >> /tmp/log
      elif [ $cod == -1 ] #Error
      then
         zenity --error --no-wrap --title="Error" --text="Ocurrio un error"
      fi
      ;;
   4)
      listaUser=`cat /etc/passwd | cut -d: -f1 | sort`
      user=`zenity --list --height=300 --title="Elija un usuario" --column="USER" $listaUser`
      cod=`echo $?`
      if [ $cod == 0 ] #Pulso Aceptar
      then
         lsgrp=`cat /etc/group | cut -d: -f1 | sort`
         grp=`zenity --list --height=300 --title="Elija un grupo" --column="GRUPOS" $lsgrp`
         sudo deluser $user $grp # pasandole a deluser un usuario y un grupo, borra al usuario del grupo
         zenity --info --no-wrap --title="$2" --text="Eliminó a \'$user\' del grupo $grp"
         echo "Eliminó a $user del grupo $grp" >> /tmp/log
      elif [ $cod == -1 ] #Error
      then
         zenity --error --no-wrap --title="Error" --text="Ocurrio un error"
      fi
      ;;
   5)
      listaUser=`cat /etc/passwd | cut -d: -f1 | sort`
      user=`zenity --list --height=300 --title="Elija una opcion" --column="USER" $listaUser`
      cod=`echo $?`
      if [ $cod == 0 ] #Pulso aceptar o cerrar
      then
         zenity --question --title="deluser" --text="Borrar home de $user?"
         if [ $? == 0 ]
         then
            sudo deluser $user --remove-home
            echo "Elimino el usuario $user con su home" >> /tmp/log
            progress "Eliminando Usuario" $user "$2"
         else
            sudo deluser $user
            echo "Elimino el usuario $user y no su home" >> /tmp/log
            progress "Eliminando Usuario" $user "$2"
         fi
      elif [ $cod == -1 ] #Error
      then
         zenity --error --no-wrap --title="Error" --text="Ocurrio un error"
      fi
      ;;
   6)
      lsgrp=`cat /etc/group | cut -d: -f1 | sort`
      grp=`zenity --list --height=300 --title="Elija un grupo" --column="GRUPOS" $lsgrp`
      cod=`echo $?`
      if [ $cod == 0 ] #Pulso Aceptar
      then
         member=`cat /etc/group | grep $grp: | cut -d: -f4 | sort` #Localizo el nombre del grupo con grep $grp: y corto los miembros
         zenity --info --no-wrap --title="$2" --text="El grupo $grp tiene de miembros: $member"
        
         echo "Listó los miembros de $grp" >> /tmp/log
      elif [ $cod == -1 ] #Error
      then
         zenity --error --no-wrap --title="Error" --text="Ocurrio un error"
      fi
      ;;
   7)
      if [ -e /tmp/log ]
      then
        
         zenity --text-info \
                          --title="LOG" \
                          --filename=/tmp/log
                          --editable 2>/tmp/tmp.txt
              rm /tmp/log /tmp/tmp.txt
             
           fi
           exit
      ;;
esac
}
###################################################################################
#Funcion para usar la barra de progreso
function progress(){
      (
      echo "0" ; sleep 1
           echo "# $1" ; sleep 1
           echo "25" ; sleep 1
           echo "75" ; sleep 1
           echo "100" ; sleep 1
           echo "# Finalizado"
          
           ) |
           zenity --progress \
             --title="$3" \
             --text="" \
             --percentage=0 \
             --width=300

           if [ "$?" = -1 ] ; then
                zenity --error \
                  --text="Suma Abortada."
           fi
}
###################################################################################
function creargrupo(){

   gksudo groupadd $1
   if [ "$?" == 9 ]
   then
      zenity --warning --title="Groupadd" --text="El grupo \'$1\' ya existe"
      return 1
   else
      return 0
   fi
}
###################################################################################
main
# Gestion de usuarios grafica

Ejemplos de uso:
Comentarios: Hay un pequeño bug, y es que dentro de la funcion seleccion, no funciona gksudo y tuve que poner sudo, Esto me pasa usando ubuntu 10.04