Base de connaissances CCM
Systèmes d'exploitation - Linux - Shell - Scripts




Sujet 6834 - Screenshot.sh

[ Voir ce sujet en ligne ] - [ Catégorie: Systèmes d'exploitation - Linux - Shell - Scripts ]


Capture d'écran




Présentation


Voilà un petit script basé sur les outils d'ImageMagic pour réaliser des captures d'écran (complètes ou partielles), avec en prime la création d'une copie de la capture "annotée", c'est à dire en y ajoutant un cadre et une annotation (la date pour être précis).

De plus il met en oeuvre aussi un petit utilitaire nommé Xdialog (création de boîte de dialogue toutes simples) vous offrant la possibilité de configurer quelques variables dudit script.

Prérequis



Note : Sous Gnome, il existe un équivalent à Xdialog qui s'appelle Zenity.
Il y a aussi Kdialog sous KDE.

Syntaxe


screenshot.sh [<setup>]

Utilisation


La toute première fois lancer le script avec le paramètre "setup" afin de configurer le répertoire de destination, le préfixe de vos captures ainsi que l'extension.
screenshot.sh setup
Une fois les variables définies, vous pourrez appeler simplement le script depuis la ligne de commande, ou bien depuis un "lanceur" sur votre bureau ou encore dans la barre des tâches.

Une première boîte de dialogue (facultative) vous informera qu'après sa fermeture vous aurez un délai de 3 secondes (paramétrable dans le script) pour choisir le bureau sur lequel doit être fait la capture.

À l'apparition du curseur d'ImageMagic (en forme de croix), faite un clic sur la fenêtre devant être capturée (ou le bureau) ou bien dessiner à l'aide de la croix un carré ou un rectangle (en faisant glisser votre souris tout en maintenant le clic gauche) et relâcher une fois arrivé à destination.

Une image et son double annotée seront créées dans le répertoire défini lors du setup.

Vous pouvez redéfinir la configuration à tout moment en relançant le "setup", ou en modifiant les variables à la main.

Code source


#! /bin/bash

# @(#)
# @(#) screenshot 17/06/2007
# @(#) version 0.1 - auteur : JP
# @(#)
# @(#) screenshot est un petit programme de capture d'écran basé sur 
# @(#) ImageMagic et faisant appel à Xdialog
# @(#)
# @(#) Usage : screenshot [< setup >]
# @(#)

### Fonction setup ###
function setup {

# Effacement des valeurs avant initialisation
sed -i '/^#A$/,/^#Z$/ s|^REPERTOIRE=.*|REPERTOIRE=|' $0
sed -i '/^#A$/,/^#Z$/ s|^NOM_IMAGE=.*|NOM_IMAGE=|' $0
sed -i '/^#A$/,/^#Z$/ s|^EXT=.*|EXT=|' $0

# Choix répertoire
REPERTOIRE=$(Xdialog --stdout --title "Répertoire" --dselect "$HOME" 0 0)
#Récupération du code retour
RETVAL="$?"
# Test variable vide. Si oui initialisation valeur par défaut
if [ -z "${REPERTOIRE}" ]
then REPERTOIRE="${HOME}/"
fi
# Test code retour Xdialog (voir doc Xdialog pour + d'info)
#+ Avec un code égal à 0 on initialise la variable REPERTOIRE avec la valeur fournie
#++ Dans tous les autres cas elle est initialisée à la valeur par défaut ($HOME)
case "$RETVAL" in
0)	sed -i "/^#A$/,/^#Z$/ s|REPERTOIRE=|&\"${REPERTOIRE}\"|" $0
	mkdir -p "$REPERTOIRE";;

*)	Xdialog --title "Annulation" --msgbox "\nLe répertoire par défaut\n\n$HOME\n\n\
	sera utilisé...\n" 10 50
	sed -i "/^#A$/,/^#Z$/ s|REPERTOIRE=|&\"$HOME/\"|" $0;;
esac

# Choix nom
NOM_IMAGE=$(Xdialog --stdout --title "Nom d'image" \
	--inputbox "Entrez un nom de référence pour les images" 0 0)
RETVAL="$?"
if [ -z "${NOM_IMAGE}" ]
then NOM_IMAGE="capture"
fi
case "$RETVAL" in
0)	sed -i "/^#A$/,/^#Z$/ s/NOM_IMAGE=/&\"${NOM_IMAGE}\"/" $0;;

*)	Xdialog --title "Annulation" --msgbox "\nLe nom générique par défaut\n\ncapture\n\n\
	sera utilisé...\n" 10 50
	sed -i "/^#A$/,/^#Z$/ s/NOM_IMAGE=/&\"capture\"/" $0;;
esac

# Choix extension
Xdialog --no-tags --radiolist  "Type d'extension" 0 0 7 \
	".png" "png - Portable Network Graphic" on \
	".jpg" "jpg ou jpeg - Joint Photographic Experts Group" off \
	".gif" "gif - Graphic Interchange Format" off \
	".bmp" "bmp - BitMaP" off \
	".tif" "tif ou tiff - Tag(ged) Image File Format" off 2>/tmp/radiolist.tmp.$$
RETVAL=$?
EXT=$(cat /tmp/radiolist.tmp.$$)
rm -f /tmp/radiolist.tmp.$$

case $RETVAL in
0)	sed -i.4.bak "/^#A$/,/^#Z$/ s/EXT=/&\"${EXT}\"/" $0;;

*)	Xdialog --title "Annulation" --msgbox "\nL'extension générique par défaut\n\npng\n\n\
	sera utilisée...\n" 10 50
	sed -i.5.bak "/^#A$/,/^#Z$/ s/EXT=/&\"\.png\"/" $0;;
esac

Xdialog --title "Setup" --msgbox "\nLes paramètres de configuration suivant ont été mis à jour :\
	\n\nREPERTOIRE = ${REPERTOIRE}\
	\nNom = ${NOM_IMAGE}\
	\nExtension = ${EXT}\
	\n\nVeuillez relancer le script s'il vous plaît...\
	\n\n" 0 0
# Le setup est fini, on quitte le script
exit
}

# Test de l'existence d'un paramètre (setup)
if [ -n "$1" ]
then
	case "$1" in
		setup)	setup # Paramètre présent, on lance la fonction
			;;

		*)	Xdialog --title "Erreur" --msgbox "\nLe script ne prend qu'un paramètre\
			\nen option.\n\nUsage : screenshot < setup >\n" 0 0
			exit
			;;
	esac
fi

# On supprime la fonction de la mémoire
unset setup

### Déclaration des variables (après lancement du setup)
#A
REPERTOIRE=
NOM_IMAGE=
EXT=
#Z

# Test de l'existence d'un fichier contenant la valeur de la variable ${NOM_IMAGE}
#+ Si la condition est vraie alors on extrait le numéro du compteur
#++ afin d'incrémenter le compteur ($COUNT) d'un pas
if [ -e $(ls "${REPERTOIRE}" | egrep \b${NOM_IMAGE}) ]
then
NUM=$(ls ${REPERTOIRE} | egrep "\b${NOM_IMAGE}" | sed 's/[^0-9]*//g'| sort -nr | sed 1q)
COUNT=$(expr ${NUM} + 1)
fi

# Boîte de dialogue d'aide à l'ouverture - Facultatif -
/usr/bin/Xdialog 	--title "Screenshot"\
			--msgbox "Vous aurez 3 secondes après la fermeture de cette fenêtre\n\
			pour choisir le bureau, ou la fenêtre à mettre en avant-plan\n\
			pour réaliser votre capture d'écran."\
			0 0

# Commande proprement dite pour la capture, avec un temps de latence de 3 secondes
import -pause 3 ${REPERTOIRE}${NOM_IMAGE}${COUNT}${EXT}


# Création d'un clône de l'image en y insérant un cadre et une annotation extérieure
#+ Épaisseur du cadre / Couleur du fond / Couleur du texte / taille du texte / Emplacement
#++ Label (ici la date reformatée)/ Fichier original / Fichier de sortie
montage -frame 5 -mattecolor black -fill white -pointsize 14 -geometry +0+0 \
        -label "$(date '+%A %e %B %Y %H:%M:%S')" ${REPERTOIRE}${NOM_IMAGE}${COUNT}${EXT} ${REPERTOIRE}${NOM_IMAGE}_annote${COUNT}${EXT}

Screenshots






Liens




Toutes critiques et améliorations sont les bienvenues...

Lire la suite

Envoi de commandes CISCO publipostées via SSH/Telnet »
Publié par jipicy - Dernière mise à jour le 18 novembre 2009 à 15:16 par marlalapocket




Sujet 9988 - Envoi de commandes CISCO publipostées via SSH/Telnet

[ Voir ce sujet en ligne ] - [ Catégorie: Systèmes d'exploitation - Linux - Shell - Scripts ]


Expect en action




Informations générales


publipmachin point cheu ? Mais c'est quoi au juste ?


Ce script permet pour un administrateur réseau, de rentrer des lignes de commandes Cisco, publipostées sur un nombre d'équipements distants choisi (routeur, firewall, switch, Point d'accès Wifi...), ce en SSH, où en Telnet (le script gère les deux types de connexion) et automatiquement.

Ces lignes de commandes seront tout d'abord saisies à la suite, une commande par ligne comme un batch, ou un fichier de configuration, dans un petit fichier nommé commandes.txt (il n'y a aucune limite de taille)
Ensuite, il va falloir rentrer toutes les IP (où alias DNS), des équipements où vous voulez que les commandes soient rentrées (il n'y a aucune limite de nombre d'équipements).

Enfin, vous exécutez le script, et là, il faudra pas vous tromper quand le script vous demandera de saisir le mot de passe, qui je le rappelle doit être impérativement le même pour tous les équipements.

Mais là où cela devient intéressant, c'est que ce script va beaucoup plus loin !

En effet, il prends en charge et ce de façon totale les erreurs de connexion, et de saisie, pour les rentrer ensuite dans un fichier log. Ce script identifie également les équipements pour lequel il est parvenu à se connecter en SSH, où en telnet, et enfin il conserve une archive des procédures de saisies générant des erreurs critiques (plantage du script, erreur d'interprétation d'une commande par l'équipement). Les différents types d'erreurs pris en charge sont :

Vous pourrez en plus d'opérer sur tous vos équipements en même temps, recueillir des informations précieuses sur votre réseau ! Elle est pas belle la vie ?

Le contenu des fichiers annexes


commandes.txt


Vous devrez absolument rentrer des commandes à la suite...Le fichier doit pour toute modification de la configuration du routeur commencer par "conf t" et finir par "end". N'oubliez pas de procéder de manière hiérarchique, pour ne pas rentrer des commandes là où il ne faut pas...et surtout...n'oubliez pas d'enregistrer vos modifications ! Petit exemple :

#commandes.txt

conf t
 router ospf 100
  network 50.50.100.0 0.0.0.255 area 0
 exit
 interface fa0/0
  ip ospf hello-interval 5
  ip ospf dead-interval 20
 exit
 area 0 authentication message-digest
end
write mem

liste.txt


Un jeu d'enfant ! Rentrez juste les IP, ou les alias DNS, des équipements concernés, et c'est tout ! Un équipement par ligne...petit exemple encore :

# liste.txt

10.25.85.46
routeur-marseille

switch-assemblee-generale
80.54.136.105


J'ai laissé volontairement un espace, pour vous montrer que le script ne prends pas en compte les espaces.

THE Script


Le script sera légendé par des petits #[1], qui seront commentés tout en bas du script

#!/bin/bash
#script.sh

echo "veuillez donner le mot de passe"
stty -echo                                                                       #[1]
read password
stty echo

export ssh='./ssh.sh'                                                            #[2]
export telnet='./telnet.sh'
export erreur='./rapport_erreurs.log'
export temp='./tmp_routeur.log'
export cmdcisco='./commandes.txt'
export liste='./liste.txt'
export password
export routeur
export commande

rm -f $erreur                                                                    #[3]
rm -f $ssh
rm -f $telnet

cat $liste | while read routeur;
do
        if [ "$routeur" != "" ]
        then
                if[ ! -f $ssh ]                                                  #[4]
                then
                        echo 'expect 2>&1 << EOF'>> $ssh
                        echo 'spawn ssh admin@$routeur' >> $ssh
                        echo 'expect {' >> $ssh
                        echo '"Password:" {send "$password\r"}' >> $ssh
                        echo 'timeout {exit}' >> $ssh
                        echo '        }' >> $ssh
                        echo 'expect "#"' >> $ssh

                        cat $cmdcisco | while read commande
                        do
                                echo "send \"$commande\r\""
                                echo 'expect "#"'
                        done >> $ssh

                        echo 'send "exit\r"' >> $ssh
                        echo 'expect "closed"' >> $ssh
                        echo 'exit' >> $ssh
                        echo 'EOF' >> $ssh

                        chmod +x $ssh                                            #[5]
                fi
                time -p $ssh > $temp 2>&1                                        #[6]

                COD_RET=$?

                auth=`cat $temp | grep -c "Password: "`                          #[7]
                if [ "$auth" -gt "1" ]
                then
                        echo "Problème d'authentification sur $routeur !"
                        echo "$routeur : wrong log-in/password" >> $erreur
                        continue
                fi

                temps=`grep 'real ' $temp | sed 's/real /§/' | cut -d'§' -f2 | cut -d' ' -f1 | cut -d'.' -f1`
                if [ $temps -ge 10 -a ! "`grep 'closed' $temp`" ]                #[8]
                then
                        echo "L'equipement $routeur ne réponds pas !";
                        echo "$routeur : connection timed out"  >> $erreur
                        continue
                fi

                if [ "$COD_RET" != "0" ]                                          #[9]
                then
                        #Erreur de connexion a l'équipement en SSH
                        if [ ! -f $telnet ]
                        then
                                echo 'expect 2>&1 << EOF'>> $telnet
                                echo 'spawn telnet $routeur' >> $telnet
                                echo 'send "admin\r"' >> $telnet
                                echo 'expect "Password:"' >> $telnet
                                echo 'send "$password\r"' >> $telnet
                                echo 'expect "#"' >> $telnet

                                cat $cmdcisco | while read commande
                                do
                                        echo "send \"$commande\r\""
                                        echo 'expect "#"'
                                done >> $telnet

                                echo 'send "exit\r"' >> $telnet
                                echo 'expect "closed"' >> $telnet
                                echo 'exit' >> $telnet
                                echo 'EOF' >> $telnet

                                chmod +x $telnet
                        fi
                        $telnet > $temp 2>&1
                fi
                COD_RET=$?

                auth=`cat $temp | grep -c "Password: "`                          #[10]
                if [ "$auth" -gt "1" ]
                then
                        echo "Problème d'authentification sur $routeur !"
                        echo "$routeur : wrong log-in/password" >> $erreur
                elif [ "`grep 'Host name lookup failure' $temp`"  ]
                then
                        echo "l'equipement $routeur n'existe pas !"
                        echo "$routeur : does not exist"  >> $erreur
                elif [ "`grep 'Unknown host' $temp`" ]
                then
                        echo "la saisie de l'ip ou du nom $routeur est incorrecte !"
                        echo "$routeur : wrong spelling" >> $erreur
                elif [ "`grep 'send: spawn id exp4 not open' $temp`" ]
                then
                        echo "/!\ ERREUR dans la procédure. Consultez le fichier log de $routeur !!!"
                        echo "$routeur : Expect script execution failed !" >> $erreur
                        cp $temp $routeur.error.log
                elif [ "`grep 'Authentication failed' $temp`" ]
                then
                        echo "Mot de passe erroné pour $routeur !"
                        echo "$routeur : wrong log-in/password" >> $erreur
                elif [ "`grep 'Connection refused' $temp`" ]
                then
                        echo "Connexion à distance sur $routeur désactivé !"
                        echo "$routeur : vty connection disabled" >> $erreur
                elif [ "`grep 'No route to host' $temp`" ]
                then
                        echo "Alias DNS $routeur existant mais IP invalide !"
                        echo "$routeur : No route to host" >> $erreur
                elif [ "`grep 'ProCurve' $temp`" ]
                then
                        echo "routeur $routeur HP et non Cisco !"
                        echo "$routeur : non Cisco router (HP ProCurve)" >> $erreur
                elif [ "`grep 'Alcatel' $temp`" ]
                then
                        echo "routeur $routeur Alcatel et non Cisco !"
                        echo "$routeur : non Cisco router (Alcatel)" >> $erreur
                elif [ "`grep 'Welcome to X1000' $temp`" ]
                then
                        echo "routeur $routeur X1000 et non Cisco !"
                        echo "$routeur : non Cisco equipement (X1000)" >> $erreur
                elif [ "`grep '% Unknown command' $temp`" -o "`grep '% Invalid' $temp`" ]
                then
                        echo "/!\ Commandes Cisco non reconnues par l'equipement. Consultez le fichier log de $routeur !!!"
                        echo "$routeur : Unrecognized commands found" >> $erreur
                        cp $temp $routeur.error.log
                elif [ "`grep 'Connected to ' $temp`" -o "`grep 'Connection closed by foreign host.' $temp`" ]
                then
                        echo "$routeur Telnet OK !"
                elif [ "`grep 'Connexion enregistree sur le terminal' $temp`" -o "`grep 'Connection to ' $temp`" ]
                then
                        echo "$routeur SSH OK !"
                elif [ "$COD_RET" != "0" ]
                then
                        echo "Problème de connexion a l'equipement $routeur !"
                        echo "$routeur : connection problem" >> $erreur
                fi
        fi
done
rm -f $temp                                                                      #[11]
exit

Commentaires


Remerciements


Je remercie en particlier jipicy, pour son aide cruciale à la réalisation de ce script, et j'espère qu'il servira à plus d'un ;)

Questions / Report de Bugs / Modifications


Pour toute demande, vous pouvez me contacter par MP, où via mon mail sur la fiche, sans problème ;)

Bonne journée !

Lire la suite

Script d'administration Linux »
Publié par lml-mike - Dernière mise à jour le 16 novembre 2009 à 12:31 par marlalapocket




Sujet 17348 - Script d'administration Linux

[ Voir ce sujet en ligne ] - [ Catégorie: Systèmes d'exploitation - Linux - Shell - Scripts ]


Script d'administration Linux


Ce script entièrement rédigé pour ceux qui souhaitent approfondir leurs connaissances en scripting Linux. Vous pouvez reprendre des briques de code, l'améliorer, il est là pour ça !

NOTA :
  • Il se peut qu'il reste des caractères spéciaux.
  • L'indentation des notes peut être décalée, elles sont commentées par le #


#!/bin/bash
#*********************************************************************************
#************************************* SCRIPT D'ADMINISTRATION Version 1.2 ***********
#*********************************************************************************
#
# Notes :
#
# ce script peut être modifié en implémentant de nouvelles fonctions
# l'indentation doit être claire et les commandes commentées
# le menu principal d'administration est en fin de script
# ce script ne peut-être exécuter qu'en tant que root
# en cas de rajout de fonction penser à  rappeler la fonction dans le menu principal ou dans le sous menu auquel 
# elle est implémentée
# en cas de modification l'interface doit restée au maximum intuitive
# 
#
#
#
#
#*************************************************************************************
#***********************************************Fonction gestion des utilisateurs
#*************************************************************************************
function gestion_utilisateur () {
function creation_supp_utilisateur () {	# fonction creation_supp_utilisateur
echo -e " \033[31m Supprimer ou créer un utilisateur ? \033[00m"
echo " Taper x pour supprimer / Taper c pour créer :"
read choix
if [ $choix = "c" ] ; 																	
then
   echo "Entrer le login de l'utilisateur souhaité :"
   read user
   adduser -a $user 2>/dev/null		# 2>/dev/null redirection vers la
    if [ $? -eq 0 ]					# poubelle de la commande précédente
    then    						# si le résultat est faux
      echo -e "\033[31m L'utilisateur $user à  bien été créé ! \033[00m"
    else
      echo -e "\033[31m Echec, l'utilisateur $user n'a pas été créé, vérifier vos données... \033[00m"
    fi
   echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
   read touche					# lecture de la touche entrée
   case $touche in

   *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
   esac
else
 if [ $choix = "x" ] ;
 then
    echo "Donner le nom de l'utilisateur à supprimer :"
    read utildel
    userdel -r $utildel 2>/dev/null		# suppression avec userdel -r
      if [ $? -eq 0 ]				# et vérification
      then     
           echo -e "\033[31m La suppression de l'utilisateur $utildel est confirmée \033[00m"
      else   
           echo -e "\033[31m Echec, de la suppression de l'utilisateur $utildel, vérifier vos données... \033[00m"
      fi
      echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
      read touche
      case $touche in

      *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
      esac
 else
      exit 0
 fi
fi
menu_utilisateur					# retour au sous menu de la fonction
} 	

function creation_supp_group () {
echo -e " \033[31m Supprimer ou créer un groupe ? \033[00m"
echo " Taper x pour supprimer / Taper c pour créer :"									
read choix
if [ $choix = "c" ] ; 
then
   echo "Entrer le nom du groupe souhaité :"
   read group
   groupadd $group 2>/dev/null
     if [ $? -eq 0 ]
     then     
        echo -e "\033[31m Le group $group a  bien été créé ! \033[00m"
     else   
        echo -e "\033[31m Echec, le group $group n'a pas été créé, vérifier vos données... \033[00m"
     fi
       echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)"
	read rep
	  if [ $rep = "y" ] ;
	  then
		vi /etc/group			# vi permet d'éditer et cat est
	  else						# plus adapté pour cette
	        echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
                read touche
                case $touche in

	        *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
		esac
		menu_utilisateur
          fi
else
 if [ $choix = "x" ];				# deuxième partie du choix
 then
    echo "Donner le nom du groupe à supprimer :"
    read group
    groupdel $group2>/dev/null		# suppression avec groupdel
     if [ $? -eq 0 ]
     then     
         echo -e "\033[31m La suppression du group $group est confirmée \033[00m"
     else   
        echo -e "\033[31m Echec, de la suppression du group $group, vérifier vos données... \033[00m"
     fi
   
      echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)"
	read rep
	  if [ $rep = "y" ] ;
	  then
		vi /etc/group
	  else
	        echo "Appuyer sur la touche <Entrée> pour revenir au menu..."
                read touche
                case $touche in

    		*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
    		esac
		menu_utilisateur			# retour au menu de la sous fonction	
	  fi
 else
   exit 0
 fi
fi
menu_utilisateur					# rappel du sous menu de la fonction
}

function voir_utilisateur () {
who -q 							 		        # montre tous les logins des utilisateurs 
echo "Appuyer sur la touche <Entrée> pour continuer..."	        # connectés
read touche		
case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}

function ajout_user_samba () {
echo "Donner le nom de l'utilisateur à  implémenter à  Samba :"
read nom	
smbpasswd -a $nom 2>/dev/null		# rajout de l'utilisateur à samba par 
    if [ $? -eq 0 ]					# smbpasswd et vérification
    then    
      echo -e "\033[31m L'utilisateur $nom a bien été rajouté à Samba \033[00m"
    else
      echo -e "\033[31m Echec l'utilisateur $nom n'a pas été rajouté à Samba, vérifier le nom... \033[00m"
    fi
echo "Appuyer sur la touche <Entrée> pour continuer..."								
read touche
case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}

function ajout_user_group () {
echo "Donner le nom de l'utilisateur à rajouter dans un groupe :"    # Note : l'interface doit être intuitive
read nom
echo "Donner le nom du groupe dans lequel vous voulez implémenter cet utilisateur :"
read group
adduser $nom $group 2>/dev/null			# rajout avec adduser d'un utilisateur à 
     if [ $? -eq 0 ]						# un groupe
     then
	echo -e "\033[31m L'utilisateur $nom a bien été rajouté au groupe $group \033[00m"
     else
	echo -e "\033[31m Echec l'utilisateur $nom n'a pas été rajouté au groupe $group, vérifier vos données... \033[00m"
     fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}

function capacite_user () {
echo "La taille des dossiers utilisateurs est de :"
du -s -h /home/*
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_utilisateur
}

function Menu_principal () {
Menu
}

function menu_utilisateur () {	  		# menu de la sous fonction
clear 								# "gestion des utilisateurs"
echo ""
echo -e "\033[36mProjet Linux				                   eXia 2008 \033[00m"
echo -e " 							   \033[36m3ème année RIR \033[00m "
echo -e "                     \033[37m________________________________\033[00m "
echo -e "                    \033[37m|    Gestion des utilisateurs    |\033[00m  "
echo""
echo -e "\033[33m*** MENU *** :\033[00m"
echo""
echo "1 - Créer / Supprimer un utilisateur"
echo "2 - Créer / Supprimer un groupe"
echo "3 - Voir les utilisateurs connectés"
echo "4 - Rajouter un utilisateur à Samba"
echo "5 - Rajouter un utilisateur à un groupe"
echo "6 - Voir la taille des dossiers des utilisateurs"
echo "7 - Revenir au menu Principal"
echo ""
echo "Entrez votre choix :"

read CHOIX						# lecture du choix et appel
case $CHOIX in						# de la fonction concernée
  1)creation_supp_utilisateur;;
  2)creation_supp_group;;
  3)voir_utilisateur;;
  4)ajout_user_samba;;
  5)ajout_user_group;;
  6)capacite_user;;
  7)Menu_principal;;

  *)exit 0;;
esac
}
menu_utilisateur
}								# FIN de la sous fonction 
								# gestion_utilisateur
#**********************************************************************************
#******************************************************Fonction tuer un processus
#**********************************************************************************
function tuer_proc () {
ps ax --sort=tty,pid | more								# défilements des processus petit à petit
echo " VEUILLEZ TAPER LE(S) "PID" DU(DES) PROCESS A TUER: "	# par l'utilisation de |more
read PROCESS										# lecture de la saisie avant la boucle POUR
for TRUC in $PROCESS; do
    kill -9 $TRUC 2>/dev/null								# arrêt des processus par kill -9
     if [ $? -eq 0 ]
     then
	echo -e "\033[31m Le(s) processus $PROCESS on été arrêtés \033[00m"
     else
	echo -e "\033[31m Echec le(s) processus $PROCESS n'on pas été arrêtés, vérifier le PID \033[00m"
     fi
done
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in

*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
}

# ***********************************************************************************
# *******************************************Fonction Récupérer les processus
# ***********************************************************************************
function recuperer_processus () {
ps -aux >> proccessus_du_$(date +%d_%m_%y).log         # récup et supp de l'ancien fichier de log par >>
echo -e "\033[31m Le fichier Log de récupération des processus a été créé sur le bureau \033[00m"	
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in

*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
Menu
}

# ***********************************************************************************
# ****************Fonction sauvegarder / rechercher par taille / nom fichier ou répertoire
# ***********************************************************************************
function sauv_recherche_fichier () {
function sauv_resol_conf () {
rsync -a /etc/resolv.conf /home/dyllan/Bureau/sauv_resol.conf_du_$(date +%d_%m_%y).log				# utilisation de rsync pour une
echo -e "\033[31m Le fichier resolv.conf du $(date +%d_%m_%y) est bien sauvegardé sur le bureau \033[00m"	                                                                       # sauvegarde distante mais non
echo "Appuyer sur la touche <Entrée> pour continuer..."	       # présentée ici
read touche
case $touche in

*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}

function sauv_suppr_autre() {
echo -e " \033[31m Supprimer ou Sauvegarder ? \033[00m"
echo " Taper x pour supprimer / Taper s pour sauvegarder :"
read choix
if [ $choix = "s" ] ; 
then
	echo "Entrez le chemin du repertoire à sauvegarder"      # demande du chemin relatif pour la supp ou 
	read chemin							      # la sauvegarde
	echo "Entrez le chemin de l'endroit où vous voulez le sauvegarder"
	read dest
	cp -r $chemin $dest 2>/dev/null		                      # copie du répertoire et tous les fichiers
           if [ $? -eq 0 ]							      # par le rajout du -r pour récursif
           then
		echo -e "\033[31m La sauvegarde a été réalisée \033[00m"
     	   else
	        echo -e "\033[31m Echec, la sauvegarde n'a pas été réalisée, vérifier vos données... \033[00m"
           fi
          echo "Appuyer sur la touche <Entrée> pour continuer..."
          read touche
	  case $touche in

	  *)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
          esac
else
 if [ $choix = "x" ];					# 2ème partie du choix : la suppression
 then
        echo "Entrez le chemin du repertoire à supprimer"
	read chem
	rm -r $chem 2>/dev/null
        if [ $? -eq 0 ]
        then
		echo -e "\033[31m La suppression de $chem est confirmée \033[00m"
     	else
	        echo -e "\033[31m Echec de la suppression de $chem, vérifier vos données... \033[00m"
        fi
        echo "Appuyer sur la touche <Entrée> pour continuer..."
        read touche
	case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
        esac
 else
         exit 0
 fi
fi
menu_sauv
} 	

function creer_rep () {
echo "Quel est le nom du répertoire ? (tapez le nom) :"
read nom
if test -x $nom ;
then
  echo -e "\033[31m Echec, le répertoire existe déjà  !\033[00m"
else
  mkdir "$nom"
  chmod 0733 $nom
  echo -e "\033[31m Le dossier $nom a été créé avec les droits sur le bureau \033[00m"
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in

*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}

function recherche_taille () {
echo -e "\033[31m La recherche est orientée supérieure ou inférieure à la taille du fichier ? \033[00m"
echo " Taper s pour supérieure / Taper i pour inférieure :"
read choix
if [ $choix = "s" ] ; 
then
   echo "Donner la taille minimum (en kilo):"
   read taille
   echo -e "\033[37m Résultat avec une taille minimum de $taille kilo :\033[00m"
   find /* -size +$taille -print				# recherche par taille orientée supérieure
else								# donc demande d'une taille minimum
 if [ $choix = "i" ];
 then
   echo "Donner la taille maximum (en kilo):"
   read taille
   echo -e "\033[37m Résultat avec une taille maximum de $taille kilo :\033[00m"
   find /* -size -$taille -print				# recherche par taille orientée inférieure
 else								# donc demande d'une taille max
   exit 0
 fi
fi
echo "Appuyer sur la touche <Entrée> pour continuer..."
read touche
case $touche in 

*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}

function recherche_nom () {
echo " Quel est le fichier ou répertoire que vous souhaitez rechercher ?"
read nom_fic
echo -e "\033[37m Résultat de votre recherche :\033[00m"
find /* -name $nom_fic						# recherche dans tout le / par le nom
echo "Appuyer sur la touche <Entrée> pour continuer..."	# cette recherche peut prendre du temps
read touche
case $touche in 

*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
esac
menu_sauv
}

function Menu_principal () {				# retour au menu Principal du script
Menu
}

function menu_sauv () {
clear 
echo ""
echo -e "\033[36mProjet Linux				                   eXia 2008 \033[00m"
echo -e " 							  \033[36m3ème année RIR \033[00m "
echo -e "                     \033[37m______________________________\033[00m "
echo -e "                    \033[37m|    Sauvegarde et Recherche   |\033[00m  "
echo""
echo -e "\033[33m*** MENU *** :\033[00m"
echo""
echo "1 - Sauvegarder le fichier resolv.conf"
echo "2 - Sauvegarder / Supprimer un fichier ou répertoire"
echo "3 - Créer un répertoire"
echo "4 - Recherche d'un fichier / répertoire par sa taille"
echo "5 - Recherche d'un fichier / répertoire par son nom"
echo "6 - Revenir au menu Principal"
echo ""
echo "Entrez votre choix :"

read CHOIX
case $CHOIX in
  1)sauv_resol_conf;;
  2)sauv_suppr_autre;;
  3)creer_rep;;
  4)recherche_taille;;
  5)recherche_nom;;
  6)Menu_principal;;

  *)exit 0;;
esac
}
menu_sauv
}

#********************************************************************************
#***********************************************Fonction Service Networking
#********************************************************************************
function networking () {
function restart () {
/etc/init.d/networking restart		# redémarrage du service networking
echo "revenir au menu ? [y/n]"
read reponse
if [ $reponse = "y" ] ; 
then
	menu
else
	echo "Appuyer sur la touche <Entrée> pour continuer..."
        read touche
        case $touche in 

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
	esac
	Menu
fi
}

function stop () {
/etc/init.d/networking stop			# arrêt du service networking par stop
echo "revenir au menu ? [y/n]"
read reponse
if [ $reponse = "y" ] ; 
then
	menu
else
	echo "Appuyer sur la touche <Entrée> pour continuer..."
        read touche
        case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
	esac
	Menu
fi
}

function start () {				# redémarrage du service networking par
/etc/init.d/networking start			# start
echo "revenir au menu ? [y/n]"
read reponse
if [ $reponse = "y" ] ; 
then
	menu
else
	echo "Appuyer sur la touche <Entrée> pour continuer..."
        read touche
        case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
	esac
	Menu
fi
}

function edit () {
vi /etc/resolv.conf				# vi permet d'éditer en ligne de commande
clear							# le fichier resolv.conf
echo""
echo "Revenir au menu Administration du service Networking ? [y/n]"
read reponse
if [ $reponse = "y" ] ; 
then
	menu
else
	echo "Appuyer sur la touche <Entrée> pour continuer..."
        read touche
        case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
	esac
	Menu
fi
}

function Menu_principal () {
Menu
}

function menu () {				# configuration de l'apparence et de la
clear 							# syntaxe du menu d'administration
echo ""						# du service Networking
echo -e "\033[36mProjet Linux				                   eXia 2008 \033[00m"
echo -e " 							   \033[36m3ème année RIR \033[00m "
echo -e "                     \033[37m____________________________________________\033[00m "
echo -e "                    \033[37m|    Administration du service Networking    |\033[00m  "
echo""
echo -e "\033[33m*** MENU *** :\033[00m"
echo""
echo "1 - Restart"
echo "2 - Stop"
echo "3 - Start"
echo "4 - Editer le fichier resolv.conf"
echo "5 - Revenir au menu Principal"
echo ""
echo "Entrez votre choix :"

read CHOIX
case $CHOIX in
  1)restart;;
  2)stop;;
  3)start;;
  4)edit;;
  5)Menu_principal;;

  *)exit 0;;
esac
}
menu
}

#****************************************************************************
#*************************************************Fonction Quitter
#****************************************************************************
function quitter () {
exit
}

#****************************************************************************
#************************************************Fonction MENU
#****************************************************************************
function Menu () {				# conception du menu Principal du script appelant
echo ""						# les sous fonctions
echo -e "\033[36mProjet Linux				                   eXia 2008 \033[00m"
echo -e " 							   \033[36m3ème année RIR \033[00m "
echo -e "                         \033[37m _______________________________ \033[00m  "
echo -e "                         \033[37m|    Script d'administration    |\033[00m  "
echo""
echo -e "\033[33m*** Menu Principal *** :\033[00m"
echo""
echo "1 - Gestion des utilisateurs"
echo "2 - Gérer les processus"
echo "3 - Récupérer les processus"
echo "4 - Sauvegarde et Recherche"
echo "5 - Administration du service Networking"
echo "6 - Quitter"
echo ""
echo "Entrez votre choix :"
read CHOIX					# lecture du choix et appel des fonctions
case $CHOIX in
  1)gestion_utilisateur;;
  2)tuer_proc;;
  3)recuperer_processus;;
  4)sauv_recherche_fichier;;
  5)networking;;
  6)quitter;;

  *)exit 0;;
esac
}							# FIN de la fonction du menu Principal
if [ ! `id -u` = 0 ]; 				# Vérification de l'identifiant du user
then							# si l'identifiant n'est pas celui de root
   echo -e "\033[31m Ce script doit être exécuté en root \033[00m"		# le script n'est pas exécute,
     echo""												# Sinon accès au menu Principal
     echo "**********************************************"
     echo "Appuyer sur la touche <Entrée> pour quitter..."
     echo "**********************************************"
     read touche
     case $touche in

	*)echo -e "\033[37m**** Reprise du script... ****\033[00m";;
     esac
   exit 0
else
   Menu
fi
Publié par dyllan - Dernière mise à jour le 3 novembre 2009 à 20:24 par marlalapocket





© Tous droits réservés 2010 Jean-François Pillou