[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
Configuration: Windows XP Firefox 2.0.0.3 Linux ubuntu
9 réponses
-
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).
-
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 -
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 ;-))
-
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é -
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 :#! /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 partieread var awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users echo $var sudo chown $var $chavecread var awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users u=$(cat users) echo $u sudo chown $u $chQuand 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 usersread 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#! /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é.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