[shell] Gestion de systeme de fichier
joh
-
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
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:
- [shell] Gestion de systeme de fichier
- Fichier bin - Guide
- Restauration systeme windows 10 - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
9 réponses
Salut,
Tiens déjà un bout de code pour afficher le fichier choisit, à adapter pour le supprimer...
Edit : Pour simplifier ton script :
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).
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
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
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 :
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" :
Inspires-toi en ;-))
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 ;-))
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
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é
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é
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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;-))
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 :
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
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é.
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é.
Salut,
je vais laisser jipicy finir son boulot :-))
toutefois pour 14 je te propose de remplacer cette partie
le fichier users contient le nom d'utilisateur
ou direct sans créer un fichier users
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 $chavec
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
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
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.
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.
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é.
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