[shell] Gestion de systeme de fichier

joh -  
 joh -
Bonjour à tous,

j'ai un petit soucie pour effectuer un petit programme en shell.

Je dois effectuer une gestion de systéme de fichier en shell pour utilisateur totalement novice.

L'utilisateur ne devra utiliser son clavier que de façon minimal par exemple pour naviguer en les différents répertoires il devra avoir une liste de répertoire sous forme de menu par exemple

Le menu se constitue comme tel se (qu'il voit a l'écran)

1 - Lister le répertoire courrant
2 - changer de répertoire
3 - Ajouter un répertoire
4 - effacer un fichier
...

Votre choix :

Imaginons qu'il choissise 4

Son répertoire doit etre lister comme tel

1 Fichier1
2 Fichier2
3 Fichier3
4 répertoire1
....

Votre choix :

Si il tape 1 alors le fichier1 sera supprimer

Mon probléme se situe au niveau comment faire la liaison entre le numéros du sous menu et du fichier

J'arrive a lister le répertoire comme ci-dessus mais pas faire la liaison entre le numéros et le fichier et je galére vraiment pas mal

Je vous met le source que j'ai éffectué

#! /bin/bash
clear
i=1
echo

for fich in *
do

echo "$i $fich"
((i++))

done
echo
echo -n "Votre choix : "
read choix

Et aprés j'ai essayé de faire un case ou un if mais rien ne se passe il m'indique des erreur

Comment faire cette liaison

J'avais penser a faire sa

Si numéros = fichier
alors supprime le fichier
Sinon affiche erreur et retourne au menu principal

Si quelqu'un serait comment faire ou aurai une idée elle serait la bienvenu.

Je vous remercie beaucoup
Configuration: Windows XP
Firefox 2.0.0.3
Linux ubuntu

9 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Tiens déjà un bout de code pour afficher le fichier choisit, à adapter pour le supprimer...
    #! /bin/bash
    clear
    i=1
    echo
    
    for fich in *
    do
    
    echo "$i $fich"
    ((i++))
    
    done
    echo
    echo -n "Votre choix : "
    read choix
    echo $(ls -1 | sed -n "${choix}p")
    ;-))

    Edit : Pour simplifier ton script :
    #! /bin/bash
    
    ls -1 | grep -v '/$' | cat -n
    echo
    echo -n "Votre choix : "
    read choix
    echo $(ls -1 | grep -v '/$' | sed -n "${choix}p")
    Le "grep -v '/$'" c'est pour ne pas lister les répertoires (si répertoires il y a).
    0
  2. joh
     
    Bonjour jipicy je te remercie grandement pour ton aide tu es vraiment un exemple à suivre. Si tu ne m'avais pas aidé je n'aurais jamais pu inventé une telle comande. Sa fait quand meme prés de 24h non stop que je travaille dessus tu m'enléve une méga épine du pied.

    J'ai suivi ton conseil et effectué la commande donné.
    En manipulant echo $(ls -1 | sed -n "${choix}p") avec un rm -Rf

    Je peux détruire ce que l'utilisateur souhaite fichier ou répertoire en tapant simplement son numéros

    J'ai suivi ta deuxiéme commande

    #! /bin/bash
    ls -1 | grep -v '/$' | cat -n
    echo
    echo -n "Votre choix : "
    read choix
    echo $(ls -1 | grep -v '/$' | sed -n "${choix}p")


    et en l'appliquant le script m'affiche quand même les repertoires.

    Est-il possible de faire l'inverse afficher seulement les repertoires sans les fichiers ?

    Je travaille dessus et je te répond des que j'ai trouvé.

    Dans tous les cas merci de m'avoir aidé tu es un chef MERCI MERCI et encor MERCI
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    et en l'appliquant le script m'affiche quand même les repertoires.
    Ton shell (du moins ta commande "ls") ne doit pas être configuré pour afficher certains attributs avec un alias de la commande "ls". Donc rajoute l'option "-F" comme suit :
    echo $(ls -F1 | grep -v '/$' | sed -n "${choix}p")
    et ça devrait le faire...

    Est-il possible de faire l'inverse afficher seulement les repertoires sans les fichiers ?
    Oui, il suffit d'enlever l'option "-v" de la commande "grep" :
    echo $(ls -F1 | grep  '/$' | sed -n "${choix}p")
    Tiens, pour tes menus, j'avais gardé dans mes bookmarks ce thread fort intéressant pour la construction de menus et sous-menus : aide programme shell
    Inspires-toi en ;-))
    0
  4. joh
     
    Salut je viens vous donner des nouvelles de mon script, il est en cours de finition et je vous le mettrez en ligne mercredi dans sa totalité.

    J'ai éffectué la quasi totalité des fonctions que je devais faire.

    Soit

    echo "[1] Lister le contenu du répertoire courrant"
    echo "[2] Changer de répertoire"
    echo "[3] Ajouter un répertoire"
    echo "[4] Supprimer un répertoire"
    echo "[5] Copier un répertoire et son contenu"
    echo "[6] Renomer un répertoire"
    echo "[7] Creer un lien symbolique sur un répertoire"
    echo "[8] Copier un fichier"
    echo "[9] Renommer un fichier"
    echo "[10] Creer un lien supplémentaire sur un fichier"
    echo "[11] Supprimer un fichier"
    echo "[12] Effacer tous les fichiers du répertoire"
    echo "[13] Modifier les droit sur un fichier ou un répertoire"
    echo "[14] Modifier le propriétaire d'un fichier ou d'un répertoire"
    echo "[15] Modifier le groupe d'un fichier ou d'un répertoire"

    Tout cela grace à jipicy qui m'a donné une aide précieuse

    Cependant j'ai des problémes avec echo "[2] Changer de répertoire"

    Voici mon code

    #! /bin/bash
    clear
    while (true)
    do
    echo "Liste de répertoire : "
    echo
    ls -F | grep '/$' | cat -n
    echo
    echo "TAPER q POUR QUITTER"
    echo "TAPER r POUR REMONTER"
    echo
    echo -n "Votre choix : "
    
    read choix
    
    
    case $choix in
            q)
            clear
            break
            ;;
            r)
            clear
            cd ..
            ;;
    esac
    clear
    echo "================================================================="
    echo -n "Vous avez choisi : "
    echo $(ls -F | grep '/$' | sed -n "${choix}p")
    echo
    cd $(ls -F | grep '/$' | sed -n "${choix}p")
    echo -n "Vous vous situez maintenant dans : "
    pwd
    echo
    done
    


    Mon problème se situe au niveau du cd ..

    Lorsque je souhaite remonter vers le dossier parent en tapant r celui-ci remonte directement vers le répertoire utilisateur quelque soit l'endroit où l'on se situe. En tapant entrer au clavier il me fait exactement la même chose.

    Ma question est comment éffectuer un cd .. correctement dans ce bout de code.
    Effectuer une navigation dans les répertoires sans problème grâce au menu (juste en utilisant le clavier numérique).

    Je sais que j'en demande trop mais je vous assure que lorsque ce script sera terminer (soit mercredi) je vous mettrez le source à disposition ce qui sera une merveilleuse inspiration pour tous les scripteurs débutants.

    Je vous remercie pour l'aide apporté
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-
    #! /bin/bash
    clear
    
    while (true)
    do
    echo "Liste de répertoire : "
    echo
    ls -F | grep '/$' | cat -n
    echo
    echo "TAPER q POUR QUITTER"
    echo "TAPER r POUR REMONTER D'UN NIVEAU"
    echo "TAPER LE chiffre CORRESPONDANT AU RÉPERTOIRE DÉSIRÉ"
    echo
    echo -n "Votre choix : "
    
    read choix
    
    
    case $choix in
            q)
            clear
            break
            ;;
            r)
            clear
            cd ..
            ;;
            [0-9]*)
            clear
            echo "================================================================="
    	echo -n "Vous avez choisi : "
    	echo $(ls -F | grep '/$' | sed -n "${choix}p")
    	echo
    	cd $(ls -F | grep '/$' | sed -n "${choix}p")
    	echo -n "Vous vous situez maintenant dans : "
    	pwd
    	echo
            ;;
    esac
    done
    ;-))
    0
  7. joh
     
    Merci jipicy franchement tu as encore assuré et je t'en remercie 1000 fois

    Il me reste encore deux fonctions à éffectuer


    echo "[14] Modifier le propriétaire d'un fichier ou d'un répertoire"
    echo "[15] Modifier le groupe d'un fichier ou d'un répertoire"


    Pour le 14

    J'ai éffectué une commande avec awk qui me permet de récupérer la liste des propriétaires avec chacune devant elle un numéros que l'utilisateur va pouvoir selectionner.
    Mon problème se situe au niveau de la récupération de ce nom de propriétaire

    Voici le code de ma fonction :
    #! /bin/bash
    
            ls -1 | grep -v '/$' | cat -n
    
            echo
    
            echo -n "Votre choix : "
    
            read choix
    
            ch=$(ls -1 | grep -v '/$' | sed -n "${choix}p")
    
            echo $ch
    
            echo "Voici la liste des utilisateurs : "
    
            cat /etc/passwd |grep '/bash' > users.txt
    
            awk -F ":" '{ print NR, $1 }' users.txt
    
            echo -n "Choix : "
    
            read var
    
            awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users
    
            echo $var <------------- Ici je dois récupérer le nom du propriétaire du fichier/répertoire au lieu du numéro de selection 
    
            sudo chown $var $ch
    
    
    
    
    
    


    et voici quand je lance le script ce que cela me donne à l'écran



    (liste de répertoire et fichier)

    Votre choix : (on choisi le repertoire ou le fichier en tapant son numéros)

    Voici la liste des utilisateurs :
    1 root
    2 johan

    Choix : 1

    1 <----- et ma variable var récupére le numéro de sélection au lieu du nom du proprio

    ce qui empêche de faire le chown



    Pour le [15]

    Le changement de groupe, je refait le même code mais avec la récupération avec awk du champ 5 dans le fichier cat /etc/passwd qui correspond au nom du groupe

    voici le code qui permettra de choisir l'utilisateur et juste aprés le groupe il n'y a pas énormément de changement mais je bug sur la récupération des noms du propriétaire et du groupe dans le fichier user.txt

    #! /bin/bash
            ls -1 | grep -v '/$' | cat -n
    
            echo
    
            echo -n "Votre choix : "
    
            read choix
    
            ch=$(ls -1 | grep -v '/$' | sed -n "${choix}p")
    
            echo $ch
    
            echo "Voici la liste des utilisateurs : "
    
            cat /etc/passwd |grep '/bash' > users.txt
    
            awk -F ":" '{ print NR, $1 }' users.txt
    
            echo -n "Choix : "
    
            read prop
    
            awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users
    
            echo $prop
    
            echo "Voici la liste des groupes : "
    
            awk -F ":" '{ print NR, $5 }' users.txt
    
            echo -n "Choix : "
    
            read group
    
            echo $group
    
            sudo chown $prop:$group $ch
    
    
    


    ce que je vois à mon écran :


    (liste de répertoire et fichier)

    Votre choix : (on choisi le repertoire ou le fichier en tapant son numéros)

    toto <-----ici le echo pour confirmer ce que je dois avoir

    Voici la liste des utilisateurs :
    1 root
    2 johan
    Choix : 2

    1 <-----ici le echo pour confirmer ce que je dois avoir

    Voici la liste des groupes :
    1 root
    2 johan,,, <-----Ici il y a des virgules et je ne veux pas les avoir

    Choix : 1

    1 <-----ici le echo pour confirmer ce que je dois avoir



    Si j'arrive à récupérer les noms dans le fichier user.txt créer sa serai super car là normalement mes variables prendraient alors le nom convenu et le chown pourra s'éffectuer

    Je vous remercie pour l'aide apporté

    Comme promis ce soir la totalité du code source sera mise à disposition je vais vous commenter les lignes pour faire plus propre et éffectuer une indentation pour y voir plus clair. Je vais continuer à bosser dessus et je vous tiens au courrant. Merci encore à jipicy de m'avoir aidé.
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    je vais laisser jipicy finir son boulot :-))

    toutefois pour 14 je te propose de remplacer cette partie
    read var
    
            awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users
    
            echo $var
            sudo chown $var $ch
    avec
    read var
    awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users
    u=$(cat users)
    echo $u
    sudo chown $u $ch
    
    Quand tu fait read var et ensuite tu tapes le numéro de ton choix c'est normal que la variable var contiendra le numéro et pas le nom (c'est comme un menu)
    le fichier users contient le nom d'utilisateur

    ou direct sans créer un fichier users
    read var
    u=$(awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt)
    echo $u
    sudo chown $u $ch


    0
  9. joh
     
    Super merci lami20j

    C'est bon pour le [15] j'ai trouvé la solution je vous la met à dispo

    en faite se n'est pas dans le fichier /etc/passwd qu'il faut chercher le groupe mais dans le fichier /etc/group

    ensuite il suffit de reprendre la solution de lami20j et on récupére le groupe pour éffectuer le changement

    Voici le code
    #! /bin/bash
    
    	ls -1 | grep -v '/$' | cat -n
    	
    	echo
    	
    	echo -n "Votre choix pour la modification du propriétaire : "
    	
    	read choix
    	
    	ch=$(ls -1 | grep -v '/$' | sed -n "${choix}p")
    	
    	echo
    	
    	echo "Voici la liste des groupes : "
    
    	cat /etc/group > groupes.txt
    
    	awk -F ":" '{ print NR, $1 }' groupes.txt
    
    	echo
    
    	echo -n "Choix du nouveau groupe : "
    
            read var
    	
    	u=$(awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' groupes.txt)
    
    	echo
    
    	sudo chown :$u $ch
    	echo "Changement de groupe éffectué avec succés"
    
    	echo "Le nouveau groupe de /$ch est maintenant $u"
    	echo 
    	
    


    Merci pour l'aide apporté je vous en suis trés reconnaissant.
    Maintenant je vais éclaircir le code pour une meilleur compréhension

    Et dés ce soir le source au complet à disposition

    Merci à jipicy et lami20j pour leur aide.
    0
  10. joh
     
    Chose promise chose due

    A défaut d'être aussi bon que les experts de ce forum qui m'ont apporté de l'aide j'apporte ma contribution en vous mettant à disposition le code source de mon projet.
    Bien sur, il est encore perfectible et beaucoup de chose sont à refaire par exemple les fonctions de copie de dossier et répertoire entre autre mais il pourrait aider les débutants ou autres personnes qui auront des projets de ce genre.

    Merci à jipicy et lami20j pour leur aide et merci à COLOMBAT à qui j'ai récupéré 2-3 fonctions voir plus haut pour voir le lien de son poste.

    Maintenant le code j'ai essayé de faire des commentaires correctes mais des coquilles se sont insérés désolé pour sa, en même temps je n'ai eu que trois jours pour le faire.

    PS : on a codé à deux ce script je me suis penché sur la partie systéme de fichier, j'ai jeté un oeil sur la partie utilisateur et processus mais je ne l'ai pas codé.

    clear
    LOGO="BIENVENU DANS LE GESTIONNAIRE DE FICHIER/PROCESSUS/UTILISATEUR"
    echo -e "\t\t" $LOGO
    echo 
    echo 
    #------------------------------------------------
    #		   FONCTION
    #------------------------------------------------
    #*****************Vérification du répertoire*************************
    
    verif_rep()
    
    {
    	echo
    	echo "=========Créer un répertoire============="
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo -n "Nom du répertoire : "
    
    	read rep
    
     case $rep in 
    	q)
    	clear 
    	break
    	;;
     esac
    
    	[ -d "$rep" ] && return 0
    
    return 1
    
    }
    #********************FIN*****************************************
    
    #****************CONTENU DU REPERTOIRE***************************
    contenurep()
    
    {
    	clear
    while (true)
    do
    	echo "=========================Liste le répertoire======================="
    	echo "==================================================================="
    	echo
    	echo -n "Vous étes actuellement sur le répertoire : "
    	pwd
    	echo
    	echo "[1] Liste du répertoire"
    	echo "[2] Liste détaillé du répertoire"
    	echo "[q] POUR QUITTER LE SOUS MENU"
    	echo 
    	echo -n "Votre choix : "
    	read lst
    	echo
     case $lst in
    	1)
    	ls -c
    	;;
    	2)
    	ls -l | more
    	;;
    	q)
    	clear
    	break
    	;;
    	*)
    	echo "pas possible"
    	pause
    	;;
     esac
    	echo
    done
    } 
    
    #*************Fonction création répertoire***********************
    
    creerrep()
    
    {
    	clear
    while (true)
     do
    
    if verif_rep
    	then echo "$rep existe déja"
    else
        if [ ! -z "$rep" ]
    	then echo "Création du répertoire $rep"
    
    	mkdir -p "$rep"
    
    	echo "Répertoire créé"
    
        fi
    fi
    done
    
    } 
    #**********************FIN********************
    
    #******************Supprime les fichiers*********
    supfic()
    {
    	clear
    while (true)
     do
    	echo "====Supprimez le fichier désirez====="
    	echo
    #-----Liste les fichiers du répertoire-------------
    	ls -1F | grep -v '/$' | cat -n
    #--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    #-------------QUITTER LE MENU----------------------
     case $choix in
            q)
    	clear
            break;;
     esac
    #-------------------------------------------------
    #---------------Supprime le rep-------------------
    	echo $(ls -F1 | grep -v '/$' | sed -n "${choix}p")
    	rm $(ls -F1 | grep -v '/$' | sed -n "${choix}p")
    #-------------------------------------------------
    
    done
    
    }
    #*******************FIN***************************
    
    #************Supprime les repertoires**************
    suprep()
    {
    	clear
    while (true)
     do
    	echo "======Supprimer le répertoire désirez======="
    	echo
    #-------LISTE DES REPERTOIRES---------------------
    	ls -1F | grep '/$' | cat -n
    #-------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    #-------TAPE q POUR QUITTER-----------------------
     case $choix in
            q)
    	clear
            break;;
    
     esac
    
    #---------------------------------------------------
    
    #------------Supprime le repertoire-----------------
            echo "Vous avez supprimé : $(ls -F1 | grep '/$' | sed -n "${choix}p")"
            rm -Rf $(ls -F1 | grep '/$' | sed -n "${choix}p")
    
    #------------------------------------------------------
    
    done
    
    }
    #*************************FIN*****************************
    
    #**********COPIER UN REPERTOIRE ET SON CONTENU************
    coprep()
    {
    	clear
    while (true)
     do
    	echo "====Quel est le dossier à copier====="
    	echo
    	#-----Liste les fichiers du répertoire-------------
    	ls -1F | grep '/$' | cat -n
    	#--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    #-------------QUITTER LE MENU----------------------
     case $choix in
            q)
    	clear
            break;;
     esac
    #-------------------------------------------------
    #-----------Copie le chemin du répertoire dans une variable--------
    	
    	cop1="$(ls -F1 | grep '/$' | sed -n "${choix}p")"
    
    #-------------------------------------------------
    
    	clear
    
    	echo "====Dans quel dossier voulez vous copier le répertoire====="
    	echo
    
    #-----Liste les fichiers du répertoire-------------
    
    	ls -1F | grep '/$' | cat -n
    
    #--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    
    	echo
    	echo -n "Votre choix : "
    	read choix
    #-------------QUITTER LE MENU----------------------
    
     case $choix in
            q)
            clear
    	break;;
     esac
    
    #-------------------------------------------------
    
    #---------------Supprime le rep-------------------
    
    	cop2="$(ls -F1 | grep '/$' | sed -n "${choix}p")"
    	cp -R $cop1 $cop2
    
    #-------------------------------------------------
    	clear
    	echo
    	echo "Votre dossier à  été copié avec succes"
    	echo 
    	pause
     break
    done
    
    }
    #************************FIN COPREP*****************************
    
    #*******************RENOMER REP***************************************
    renrep()
    {
    	clear
    while (true)
     do
    	echo "====Quel est le dossier à renomer====="
    	echo
    #-----Liste les fichiers du répertoire-------------
    
    	ls -1F | grep '/$' | cat -n
    
    #--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    
    #-------------QUITTER LE MENU----------------------
    
     case $choix in
            q)
    	clear
            break;;
     esac
    
    #-------------------------------------------------
    #------copie le le nom du répertoire dans une variable----
    
    	cop1="$(ls -F1 | grep '/$' | sed -n "${choix}p")"
    
    #-------------------------------------------------
    
    	clear
    	echo "====Donner le nom de votre nouveau répertoire====="
    	echo
    	echo -n "Taper le nouveau nom : "
    	read nouv
    
    	mv $cop1 $nouv
    
    	clear
    	echo
    	echo "Votre dossier à  été renomer avec succès"
    	echo
    	pause
    	
     break
    done
    }
    
    #************************FIN RENREP**********************************
    
    #********Lien symbolique sur un répertoire***********************
    lnrep()
    {
    	clear
    while (true)
     do
    	echo "====Sur quel répertoire voulez vous créer le lien symbolique====="
    	echo
    
    #-----Liste les fichiers du répertoire-------------
    
    	ls -1F | grep '/$' | cat -n
    
    #--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    #-------------QUITTER LE MENU----------------------
     case $choix in
            q)
    	clear
            break;;
     esac
    #-------------------------------------------------
    #------copie le nom du répertoire dans une variable----
    
    	cop1="$(ls -F1 | grep '/$' | sed -n "${choix}p")"
    
    #-------------------------------------------------
    
    	clear
    	echo -n "Veuillez saisir un nom pour votre lien : "
    	read lien
    	echo
    	ln -sv $cop1 $lien
    	echo -n "Votre lien a été créer ici : "
    	pwd
    	echo
    	echo "Etat du répertoire : "
    	echo "============================================================"
    	ls -1F | more | grep -v '/$' | cat -n
    	echo "============================================================"
    	echo
    	pause
    done
    }
    
    #************************FIN lnrep***********************************
    
    #**************************COPIER FICHIER***************************
    copfic()
    {
    clear
    while (true)
     do
    	echo "====Quel est le fichier à copier====="
    	echo
    
    #-----Liste les fichiers du répertoire-------------
    
    	ls -1F | grep -v '/$' | cat -n
    
    #--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    #-------------QUITTER LE MENU----------------------
     case $choix in
            q)
    	clear
            break;;
    
     esac
    
    #-------------------------------------------------
    
    #-----------Copie le chemin du rep dans une variable--------
    
    	cop1="$(ls -F1 | grep -v '/$' | sed -n "${choix}p")"
    
    #-------------------------------------------------
    
    	clear
    
    	echo "====Dans quel dossier voulez vous copier le fichier====="
    	echo
    
    #-----Liste les fichiers du répertoire-------------
    
    	ls -1F | grep '/$' | cat -n
    
    #--------------------------------------------------
    
    	echo
    	echo "TAPER q POUR QUITTER"
    
    	echo
    	echo -n "Votre choix : "
    	read choix
    
    #-------------QUITTER LE MENU----------------------
    
     case $choix in
            q)
    	clear
            break;;
     esac
    
    #-------------------------------------------------
    
    #---------------Copie le fichier-------------------
    
    	cop2="$(ls -F1 | grep '/$' | sed -n "${choix}p")"
    	cp -R $cop1 $cop2
    
    #-------------------------------------------------
    	clear
    	echo
    	echo "Votre dossier à  été copié avec succes"
    	echo
     break
    done
    }
    #************************FIN COPFIC**********************
    
    #*************************RENOMER FICHIER****************
    
    renfic()
    {
    	clear
    while (true)
     do
    	echo "====Quel est le fichier à renomer====="
    	echo
    
    #-----Liste les fichiers du répertoire-------------
    
    	ls -1F | grep -v '/$' | cat -n
    
    #--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    #-------------QUITTER LE MENU----------------------
     case $choix in
            q)
    	clear
            break;;
     esac
    
    #-------------------------------------------------
    
    #------copie le nom du répertoire dans une variable----
    
    	cop1="$(ls -F1 | grep -v '/$' | sed -n "${choix}p")"
    
    #-------------------------------------------------
    
    	clear
    	echo "====Donner un nouveau nom à votre fichier====="
    	echo
    	echo -n "Taper le nouveau nom : "
    	read nouv
    
    	mv $cop1 $nouv
    
    	clear
    	echo
    	echo "Votre fichier à  été renomer avec succès"
    	echo
    	pause
     break
    	
    done
    }
    
    #***************************FIN RENFIC*********************
    
    #***************Lien symbolique sur fichier*********
    lnfic()
    {
    	clear
    while (true)
     do
    	echo "====Sur quel répertoire voulez vous créer le lien symbolique====="
    	echo
    
    #-----Liste les fichiers du répertoire-------------
    
    	ls -1F | grep -v '/$' | cat -n
    
    #--------------------------------------------------
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    
    #-------------QUITTER LE MENU----------------------
     case $choix in
            q)
    	clear
            break;;
     esac
    
    #-------------------------------------------------
    
    #------copie le nom du répertoire dans une variable----
    
    	cop1="$(ls -F1 | grep -v '/$' | sed -n "${choix}p")"
    
    #-------------------------------------------------
    
    	clear
    	echo -n "Veuillez saisir un nom pour votre lien : "
    	read lien
    	echo
    	ln -sv $cop1 $lien
    	echo -n "Votre lien a été créer ici : "
    	pwd
    	echo
    	echo "Etat du répertoire : "
    	echo "============================================================"
    	ls -1F | more | grep -v '/$' | cat -n
    	echo "============================================================"
    	echo 
    	pause
    done
    
    }
    
    #***********************FIN lnfic*******************
    #***********************change rep******************
    chrep()
    {
    	clear
    
    while (true)
     do
    	echo "Liste de répertoire : "
    	echo
    	ls -F | grep '/$' | cat -n
    	echo
    	echo "TAPER q POUR QUITTER"
    	echo "TAPER r POUR REMONTER D'UN NIVEAU"
    	echo "TAPER LE chiffre CORRESPONDANT AU RÉPERTOIRE DÉSIRÉ"
    	echo
    	echo -n "Votre choix : "
    
    	read choix
    
    
     case $choix in
            q)
            clear
            break
            ;;
            r)
            clear
            cd ..
            ;;
            [0-9]*)
            clear
            echo "================================================================="
            echo -n "Vous avez choisi : "
            echo $(ls -F | grep '/$' | sed -n "${choix}p")
            echo
            cd $(ls -F | grep '/$' | sed -n "${choix}p")
            echo -n "Vous vous situez maintenant dans : "
            pwd
            echo
            ;;
     esac
    done
    }
    #*********************FIN chrep**********************
    
    #*****************Supprime tous les fichiers**********
    
    supallfic()
    {
    	clear
    while (true)
     do
    
    	echo -n "Voulez vraiment supprimer tous les fichiers du répertoire : "
    	pwd
    	echo
    	echo "Tapez 1 pour confirmer"
    	echo "Tapez 2 pour annuler"
    	echo
    	read choix
    
     case $choix in
    	
    	1)
    	clear
    	rm -v ./*
    	echo "Tous les fichiers du répertoire viennent d'étre supprimé"
    	;;
    	2)
    	clear
    	break
    	;;
    	*)
    	echo "Opération non valide"
    	;;
     esac
     
     break
    
    done
    }
    
    #*******************FIN supallfic******************
    
    #************************APPLICATION DES DROIT**********
    
    applidroit()
    {
    while(true)
     do
    	echo "****************************************************"
    	echo "#    Changement des droits du PROPRIETAIRE         #"
    	echo "#                                                  #" 
    	echo "#       TAPEZ o POUR (OUI) OU n POUR (NON)         #"
    	echo "****************************************************"
    	echo
    	echo -n "Voulez vous les droit de lecture (o/n) : "
    
    	read drproprea
     
    case $drproprea in
    	o)
    	echo "Vous avez mis les droit de lecture"
    	rprop=4
    	;;
    	n)
    	echo "Vous n'avez pas les droits de lecture"
    	rprop=0
    	;;
     esac
    	echo
    	echo "===================================================="
    	echo
    	echo -n "Voulez vous les droit d'écriture (o/n) : "
    
    	read drpropwri
    
     case $drpropwri in
            o)
            echo "Vous avez mis les droit d'écriture"
            wprop=2
            ;;
            n)
            echo "Vous n'avez pas les droits d'écriture"
            wprop=0
            ;;
    
     esac
    	echo
    	echo "===================================================="
    	echo
    	echo -n "Voulez vous les droit d'éxécution (o/n) : "
    	read drpropexe
     case $drpropexe in
            o)
            echo "Vous avez mis les droit d'éxécution"
            eprop=1
            ;;
            n)
            echo "Vous n'avez pas les droits d'éxécution"
            eprop=0
            ;;
    
     esac
    	echo
    
    #*******************************GROUPE************************************************
    
    	echo "****************************************************"
    	echo "#        Changement des droits du GROUPE           #"
    	echo "#                                                  #" 
    	echo "#       TAPEZ o POUR (OUI) OU n POUR (NON)         #"
    	echo "****************************************************"
    	echo
    	echo -n "Voulez vous les droit de lecture (o/n) : "
    	read drgrrea
     case $drgrrea in
    	o)
    	echo "Vous avez mis les droit de lecture"
    	rgr=4
    	;;
    	n)
    	echo "Vous n'avez pas les droits de lecture"
    	rgr=0
    	;;
    
     esac
    	echo
    	echo "===================================================="
    	echo
    	echo -n "Voulez vous les droit d'écriture (o/n) : "
    	read  drgrwri
     case $drgrwri in
            o)
            echo "Vous avez mis les droit d'écriture"
            wgr=2
            ;;
            n)
            echo "Vous n'avez pas les droits d'écriture"
            wgr=0
            ;;
    
     esac
    	echo "================================================="
    	echo
    	echo -n "Voulez vous les droit d'éxécution (o/n) : "
    
    	read drgrexe
    
     case $drgrexe in
            o)
            echo "Vous avez mis les droit d'éxécution"
            egr=1
            ;;
            n)
            echo "Vous n'avez pas les droits d'éxécution"
            egr=0
            ;;
    
     esac
    	echo
    
    
    #*************************************AUTRE*************************************************
    
    	echo
    	echo "****************************************************"
    	echo "#       Changement des droits des AUTRES           #"
    	echo "#                                                  #" 
    	echo "#       TAPEZ o POUR (OUI) OU n POUR (NON)         #"
    	echo "****************************************************"
    	echo
    	echo "===================================================="
    	echo
    	echo -n "Voulez vous les droit de lecture (o/n) : "
    
    	read drautrea
    
     case $drautrea in
    	o)
    	echo "Vous avez mis les droit de lecture"
    	raut=4
    	;;
    	n)
    	echo "Vous n'avez pas les droits de lecture"
    	raut=0
    	;;
    
     esac
    	echo
    	echo "===================================================="
    	echo
    	echo -n "Voulez vous les droit d'écriture (o/n) : "
    	read drautwri
     case $drautwri in
            o)
            echo "Vous avez mis les droit d'écriture"
            waut=2
            ;;
            n)
            echo "Vous n'avez pas les droits d'écriture"
            waut=0
            ;;
    
     esac
    	echo
    	echo "===================================================="
    	echo
    	echo  -n "Voulez vous les droit d'éxécution (o/n) : "
    	read drautexe
     case $drautexe in
            o)
            echo "Vous avez mis les droit d'éxécution"
            eaut=1
            ;;
            n)
            echo "Vous n'avez pas les droits d'éxécution"
            eaut=0
            ;;
    
     esac
    	clear
    	echo
    
    	let drpro=$rprop+$wprop+$eprop
    	let drgrp=$rgr+$wgr+$egr
    	let draut=$raut+$waut+$eaut
    
    	echo
    	chmod $drpro$drgrp$draut $(ls | sed -n "${choix}p")
    	echo "Application des droits sur le fichier éffectué"	
     
     break
    done
    }
    
    
    #***********************************FIN applidroit***********************************
    
    #************************************droit*****************************************
    droit()
    {
    	clear
    while (true)
     do
    	echo "====Choissisez le fichier ou répertoire pour le changement de droit====="
    	echo
    	ls | grep -v '/$' | cat -n
    	echo
    	echo "TAPEZ q POUR QUITTER"
    	echo
    	echo -n "Votre choix : "
    	read choix
    	echo
    	clear
     case $choix in
    
    	[0-9]*)
    	echo -n "Vous avez choisi de changer les droits sur : "
    	echo $(ls | sed -n "${choix}p")
    	echo
    	applidroit	
    	;;
    	q)
    	clear
    	break
    	;;
    	*)
    	clear
    	echo "Opération non valide"
    	;;
     esac
    done
    
    }
    
    #*********************FIN droit********************
    
    #********************Changement de propriétaire****************
    chgprop()
    {
    while (true)
     do
    	ls -1 | grep -v '/$' | cat -n
    	
    	echo
    	
    	echo -n "Votre choix pour la modification du propriétaire : "
    	
    	read choix
    	
    	ch=$(ls -1 | grep -v '/$' | sed -n "${choix}p")
    	
    	echo
    	
    	echo "Voici la liste des utilisateurs : "
    
    	cat /etc/passwd |grep '/bash' > users.txt
    
    	awk -F ":" '{ print NR, $1 }' users.txt
    
    	echo
    
    	echo -n "Choix du nouveau propriétaire : "
    
            read var
    	
    	u=$(awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt)
    
    	echo
    
    	sudo chown $u $ch
    	echo "Changement de propriétaire éffectué avec succés"
    
    	echo "Le nouveau propriétaire de /$ch est maintenant $u"
    	echo 
    	rm users.txt
    	pause
    	clear
     break 
    done	
    }
    #*********************************FIN chgprop************************************
    
    #******************************Changement de groupe*************************
    #! /bin/bash
    chggrp()
    {
    while (true)
     do
    	ls -1 | grep -v '/$' | cat -n
    	
    	echo
    	
    	echo -n "Votre choix pour la modification du propriétaire : "
    	
    	read choix
    	
    	ch=$(ls -1 | grep -v '/$' | sed -n "${choix}p")
    	
    	echo
    	
    	echo "Voici la liste des groupes : "
    
    	cat /etc/group > groupes.txt
    
    	awk -F ":" '{ print NR, $1 }' groupes.txt
    
    	echo
    
    	echo -n "Choix du nouveau groupe : "
    
            read var
    	
    	u=$(awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' groupes.txt)
    
    	echo
    
    	sudo chown :$u $ch
    	echo "Changement de groupe éffectué avec succés"
    
    	echo "Le nouveau groupe de /$ch est maintenant $u"
    	echo 
    	rm groupes.txt
    	pause
    	clear
     break
    done	
    
    
    }
    
    #*******************************FIN chggrp*****************************
    
    
    
    
    # Partie 2.1
    # " Lister tout les processus actif "
    
    listprocactif() {
    	ps aux > /stocktemp/tempprocess.txt
    
    	awk '{print $0}' /stocktemp/tempprocess.txt
    }
    
    
    #               Partie 2.2 
    # "Lister les processus pour un utilisateur"
    
    procuser()
    {
    
    cat /etc/passwd | grep "/bash" | cut -f1 -d : >/stocktemp/utilisateur.txt
    
    awk '{print NR, $1}' /stocktemp/utilisateur.txt
    
    	for i in $(cut -f1 /stocktemp/utilisateur.txt ) ; do
    	tab[$j]=$i
    	j=$j+1
    	done
    echo "faitesrreter u votre choix"
    read k
    echo "voici les processus de : ${tab[$k-1]}"
    
    ps aux |grep ${tab[$k-1]} |more
    }
    
    
    # Partie 2.3
    # "Arreter un processus"
    
    stopprocessus()
    {
    	rm -R /stocktemp/tempprocess
    	rm -R /stocktemp/tempprocess.txt
    	ps aux | cut -f2 > /stocktemp/tempprocess
    	awk '{print $2}' /stocktemp/tempprocess >/stocktemp/tempprocess.txt
    	awk '{print NR ,$1 ,$2 ,$9 ,$11}' /stocktemp/tempprocess|more 
    
    for i in $(cat /stocktemp/tempprocess.txt ) ;
     do
    	tab[$w]=$i
    	w=$w+1
    done
    
    
    	echo "Selectionner le processus à arreter"
    
    	read choixuser
    
    	kill ${tab[$choixuser-1]}
    
    	echo "vous venez d'arreter le processus : ${tab[$choixuser-1]}"
    }
    
    
    # Partie 2.4
    # "Arréter le système"
    
    stoppc()
    {
    echo "Choississez ce que vous voulez :"
    	select stoppc in "Ceci arretera votre ordinateur" "Ceci redemarrera votre ordinateur"
    	do
    		case $stoppc in
    		 "Ceci arretera votre ordinateur")sudo init 0;;
    		 "Ceci redemarrera votre ordinateur")sudo init 6;;
    
    		 *)echo "veuillez choisir";;
    		esac
    	done
    }
    
    #        3.1             #
    # Ajout d'un utilisateur #
    
    adduser ()
    {
    	echo "Entrez le nom de l'utilisateur à ajouter"
    	read nom
    
    	echo "Entrez le mot de passe"
    	read pass
    
    	useradd $nom -p $(mkpasswd $pass) -m
    }
    
    
    #             3.2                 #
    # Supprimer un compte utilisateur #
    
    deluser ()
    {
    	echo "Entrez le nom de l'utilisateur à supprimer"
    	read nom
    
    
    	sudo deluser --remove-home $nom
    }
    
    
    #                    3.3                        #
    # Créer les comptes pour une promotion d'élèves #
    
    elevepromo ()
    {
    	echo "Entrez le nom du groupe"
    	read groupe
    
    	echo "Entrez le nom de l'utilisateur à ajouter"
    	read nom
    	
    	echo "Entrez le mot de passe"
    	read pass
    
    	sudo addgroup $groupe
    	sudo useradd $nom -p $(mkpasswd $pass) -G $groupe  -m
    }
    
    #                       3.4                         #
    # Supprimer les comptes pour une promotion d'élèves #
    
    delelevepromo ()
    {
    	awk '{print NR, $0}' /etc/group | more
    	awk -F ":" '{print $3}' /etc/group > /stocktemp/delprom.txt
    for i in $(cat /stocktemp/delprom.txt);
    do
    	tab[$w]=$x
    	w=$w+1
    done
    	echo "faites votre choix"
    	read choix
    
    	group=`awk -F ":" -v l=$choix 'NR==l {print $1}' /etc/group`
    	cat /etc/passwd | grep ${tab[$choix-1]} > /stocktemp/temp.txt
    	awk -F ":" '{print $1}' /stocktemp/temp.txt > /stocktemp/delprom.txt
    
    	for i in $(cat /script/result.txt);
    	do
    		sudo deluser --remove-home $i
    	done
    	sudo delgroup $group
    }
    
    
    #                            3.5                            #
    # Envoyer un message immdediat sur l'écran d'un utilisateur #
    
    messageuser ()
    {
    	echo " Voici la liste des utilisateurs pouvant recevoir un message "
    		cat /etc/passwd | grep "/bash" | cut -f1 -d : >/stocktemp/utilisateur.txt
    		awk '{print NR, $0}' /stocktemp/utilisateur.txt
    
    	echo " Choissiez un utilisateur "
    	read user
    
    		destinataire=`awk -F ":" -v l=$user 'NR==l {print $0}' /stocktemp/utilisateur.txt`
    
    	echo " quel message souhaitez vous lui envoyer ?? "
    	read texte
    
    	echo $texte > /stocktemp/texte.txt
    		`cat /stocktemp/texte.txt | write $destinataire`
    }
    
    #              3.6                   #
    # Envoyer un message à tout le monde #
    
    messageall ()
    {
    	echo " saississez le texte souhaiter "
    	read texte
    	echo $texte > /stocktemp/texte.txt
    
    		`cat /stocktemp/texte.txt | wall`
    
    	echo " ~~~ message envoyé ~~~ "
    }
    
    
    
    #**********************PAUSE*****************************
    
    pause()
    
    {
    
    	echo "Appuyer sur Entrée"
    
    	read touche
    
    } 
    #***************************************************************
    
    
    menuproc() 
    {
    while (true)
     do
    	sep="================== Menu Gestion des Processus ==============="
    	sep2="============================================================="
    	
    	echo $sep2
    	echo $sep
    	echo $sep2
    	echo ""
    	echo "[1] Lister tout les processus actif"
    	echo "[2] Lister les processus pour un utilisateur"
    	echo "[3] Arreter un processus"
    	echo "[4] Arréter le système"
    	echo ""
    	echo $sep2
    	echo ""
    	echo "[q] POUR QUITTER LE MENU"
    	echo ""
    	echo -n "Votre choix : "
    	read mnu 
    
    
    case $mnu in
    	1)
    	clear
    	listprocactif
    	;;
    	2)
    	clear
    	procuser
    	;;
    	3) 
    	clear		
    	stopprocessus
    	;;
    	4) 
    	clear		
    	stoppc
    	;;
    	q) 
    	clear
    	break
    	;;
    	*)
    	clear
    	echo "OPERATION NON VALIDE"
    	pause
    	;;
     esac
    done
    }
    
    
    menuutils() 
    {
    while (true)
     do
    	sep="================= Menu Gestion des Utilisateurs ============="
    	sep2="============================================================="
    	
    	echo $sep2
    	echo $sep
    	echo $sep2
    	echo "" 
    	echo "[1]Ajout d'un utilisateur" 
    	echo "[2]Supprimer un compte utilisateur" 
    	echo "[3]Créer les comptes pour une promotion d'élèves" 
    	echo "[4]Supprimer les comptes pour une promotion d'élèves" 
    	echo "[5]Envoyer un message immdediat sur l'écran d'un utilisateur" 
    	echo "[6]Envoyer un message à tout le monde" 
    	echo 
    	echo ""
    	echo $sep2
    	echo ""
    	echo "[q] POUR QUITTER LE MENU"
    	echo ""
    	echo -n "Votre choix : "
    	read mnu 
    
    
    case $mnu in
    	1)
    	clear
    	adduser
    	;;
    	2)
    	clear
    	deluser
    	;;
    	3) 
    	clear		
    	elepromo
    	;;
    	4) 
    	clear		
    	delelepromo
    	;;
    	5) 
    	clear		
    	messageuser
    	;;
    	6) 
    	clear		
    	messageall
    	;;
    	q) 
    	clear
    	break
    	;;
    	*)
    	clear
    	echo "OPERATION NON VALIDE"
    	pause
    	;;
     esac
    done
    }
    
    
    
    
    
    
    #**************************************************
    #                    MENU FICHIER
    #**************************************************
    menufic()
    {
    	clear
    while (true)
     do
    	sep="====================MENU FICHIER============================"
    	sep2="============================================================="
    	echo $sep
    	echo ""
    	echo "[1] Lister le contenu du répertoire courrant"
    	echo "[2] Changer de répertoire"
    	echo "[3] Ajouter un répertoire"
    	echo "[4] Supprimer un répertoire"
    	echo "[5] Copier un répertoire et son contenu"
    	echo "[6] Renomer un répertoire"
    	echo "[7] Creer un lien symbolique sur un répertoire"
    	echo "[8] Copier un fichier"
    	echo "[9] Renommer un fichier"
    	echo "[10] Creer un lien supplémentaire sur un fichier"
    	echo "[11] Supprimer un fichier"
    	echo "[12] Effacer tous les fichiers du répertoire"
    	echo "[13] Modifier les droit sur un fichier ou un répertoire"
    	echo "[14] Modifier le propriétaire d'un fichier ou d'un répertoire"
    	echo "[15] Modifier le groupe d'un fichier ou d'un répertoire"
    	echo ""
    	echo $sep2
    	echo ""
    	echo "[q] POUR QUITTER LE MENU"
    	echo ""
    	echo -n "Votre choix : "
    	read mnu 
    
    #------------------------------------------------------
    #		COMMANDE DU MENU
    #------------------------------------------------------
    
     case $mnu in
    	1)
    	clear
    	contenurep
    	;;
    	2)
    	clear
    	echo "Changer de répertoire"
    	chrep
    	;;
    	3) 
    	clear		
    	echo "Ajouter un répertoire"
    	creerrep
    	;;
    	4)
    	clear
    	suprep
    	;;
    	5)
    	clear
    	coprep
    	;;
    	6)
    	clear
    	renrep
    	;;
    	7)
    	clear
    	lnrep
    	;;
    	8)
    	clear
    	copfic
    	;;
    	9)
    	clear
    	renfic
    	;;
    	10)
    	clear
    	lnfic
    	;;
    	11)
            clear
            supfic
            ;;
    	12)
    	clear		
    	supallfic
    	;;
    	13)
    	clear
    	droit		
    	;;
    	14)
    	clear
    	chgprop
    	;;
    	15)
    	clear
    	chggrp
    	;;
    	q) 
    	clear
    	break
    	;;
    	*)
    	clear
    	echo "OPERATION NON VALIDE"
    	pause
    	;;
     esac
    done
    }
    #***********************Fin**************************************
    
    
    #------------------------------------------------------------------
    #			MENU PRINCIPAL
    #------------------------------------------------------------------
    
    while (true)
     do
    	sep="=======================MENU PRINCIPAL=========================="
    	sep2="============================================================="
    	echo $sep
    	echo ""
    	echo "[1] Menu Gestion du systéme de fichier"
    	echo "[2] Menu Gestion des processus"
    	echo "[3] Menu Gestion des utilisateurs"
    	echo "[q] POUR REVENIR AU PROMPT"
    	echo
    	echo -n "Votre choix : "
    	read pri
    	echo
    
     case $pri in
    	1)
    	clear
    	menufic
    	;;
    	2)
    	clear
    	menuproc
    	;;
    	3)
    	clear
    	menuutils
    	;;
    	q)
    	clear
    	break	
    	;;
    	*)
    	clear
    	echo "OPERATION NON VALIDE"
    	pause
    	;;
     esac
    done
    
    
    
    
    
    0