[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
A voir également:

9 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
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
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