Rechercher : dans
Par :

[Shell Bash] Exercice Complet

Dernière réponse le 6 oct 2008 à 13:31:38 Zjulkerw, le 17 mai 2007 à 01:37:08 
 Signaler ce message aux modérateurs

Bonjour à tous,
Voici un exercice que je devais faire, mon premier exercice de script sur Linux, pour un début, je trouve que c'est pas trop mal.
Il y a évidemment des trucs à améliorer, des mauvaises mises en formes... mais ça fonctionne. :p

1 : GESTION DU SYSTEME
1-1- LISTER LE REPERTOIRE COURANT
1-2- CHANGER DE REPERTOIRE COURANT
1-3- AJOUTER UN REPERTOIRE
1-4- SUPPRIMER UN REPERTOIRE
1-5- COPIER UN REPERTOIRE ET SON CONTENU
1-6- RENOMMER UN REPERTOIRE
1-7- CREER UN LIEN SYMBOLIQUE POUR UN REPERTOIRE
1-8- COPIER UN FICHIER
1-9- RENOMMER UN FICHIER
1-10- CREER UN LIEN SUPPLEMENTAIRE SUR UN FICHIER
1-11- EFFACER UN FICHIER
1-12- EFFACER TOUS LES FICHIERS DU REPERTOIRE
1-13- MODIFIER LES DROITS SUR UN FICHIER OU SUR UN REPERTOIRE
1-14- MODIFIER LE PROPRIETAIRE D'UN FICHIER OU D'UN REPERTOIRE
1-15- MODIFIER LE GROUPE D'UN FICHIER OU D'UN REPERTOIRE

2 : GESTION DES PROCESSUS
2-1- LISTER TOUS LES PROCESSUS ACTIFS
2-2- LISTER LES PROCESSUS POUR UN UTILISATEUR
2-3- ARRETER UN PROCESSUS
2-4- ARRETER LE SYSTEME

3 : GESTION DES UTILISATEURS
3-1- CREER UN COMPTE UTILISATEUR
3-2- SUPPRIMER UN COMPTE UTILISATEUR
3-3- CREER UN COMPTE POUR UNE PROMOTION D’ELEVES
3-4- SUPPRIMER LES COMPTES POUR UNE PROMOTION D’ELEVES
3-5- ENVOYER UN MESSAGE IMMEDIAT SUR L’ECRAN D’UN UTILISATEUR
3-6- ENVOYER UN MESSAGE IMMEDIAT A TOUT LE MONDE

Pour répondre à cet exercice, j'ai créé 5 fichiers :
- lancement.sh
- Menu.sh
- gestion_systeme.sh
- gestion_processus.hs
- gestion_utilisateurs.sh

lancement.sh :
#!/bin/bash
# Fichier "lancement.sh"

# initialisation première utilisation
cd /script/interface_gestion/temp
echo "0" > init.txt
echo "0" > cibleetablie.txt
echo "0" > fichiercible.txt
echo "0" > fichierpwdcible.txt

#appel du menu
cd /script/interface_gestion
./Menu.sh


Menu.sh :
#!/bin/bash
# Fichier "Menu.sh"



cd /home/Projet/temp

# affecte a $REPLY la valeur de init.txt
read < init.txt



#si démarrage
if [ $REPLY -eq 0 ];

#on enregistre /home comme répertoire de départ sinon on garde le chemin pré enregistré
then echo "/home" > temppwd.txt
echo "1" > init.txt

fi

clear

echo "###############################################################"
echo "# MENU #"
echo "###############################################################"
echo ""
echo "1) Gestion du systeme de fichier "
echo "2) Gestion des processus "
echo "3) Gestion des utlisateurs "
echo "4) Quitter "
echo
echo -n "Votre Choix : "

read choix

# on se met dans le rep où sont localisés les scripts à executer
cd /script/interface_gestion/
# on execute les scipts suivant le choix utilisateur
case $choix in
"1") ./gestion_systeme.sh ;;
"2") ./gestion_processus.sh ;;
"3") ./gestion_utilisateurs.sh ;;
"4") clear && echo "Au revoir" && exit ;;
*) echo "Veuillez saisir un chiffre entre 1 et 4" && read var && ./Menu.sh ;;
esac


gestion_systeme :
#!/bin/bash
# Fichier "Gestion du systeme de fichier.sh"

clear

##################################
# 1) Lister le répertoire courant#
##################################

fctlisterrepertoircourant() {
clear

#on se met dans le répertoire de travail courant
fctretourpwd

#j'utilise la fonction fctshowlsREP()
fctshowlsREP

#retour menu
echo "Taper sur Entrée pour revenir au menu"
read attend_suite
fctg_systeme

}

###########################
#affichage des répertoires#
###########################

fctshowlsREP() {

echo "Vous etes actuellement dans le repertoire $PWD "
echo "Il contient les repertoires :"
fctstockpwd

#redirige ls -all|grep ^d dans templs.txt
ls -all|grep ^d > /script/interface_gestion/temp/templs.txt


cd script/interface_gestion/temp
#affiche le numéro de ligne et le champ numéro 8 de templs.txt
awk '{print NR,$8}' templs.txt

fctretourpwd

}

########################
#affichage des fichiers#
########################

fctshowls() {

echo "Vous etes actuellement dans le repertoire $PWD "
echo "Il contient les fichiers :"
fctstockpwd

#redirige ls dans templsf.txt
ls -d * > /script/interface_gestion/temp/templsf.txt


cd script/interface_gestion/temp
#affiche le numéro de ligne et le champ numéro 8 de templsf.txt
awk '{print NR,$1}' templsf.txt

fctretourpwd

}


#########################################
#stock la valeur de pwd dans temppwd.txt#
#########################################

fctstockpwd(){


varpwd=`pwd`
cd script/interface_gestion/temp
echo $varpwd > temppwd.txt
cd $varpwd
}

############################################
#récupère la valeur de pwd dans temppwd.txt#
############################################

fctretourpwd(){

cd /script/interface_gestion/temp
read < temppwd.txt
cd $REPLY
}

##############################################
#stock pwd et relance le menu gestion système#
##############################################

fctg_systeme(){

fctstockpwd
cd script/interface_gestion/
./gestion_systeme.sh
}

##################################
#2) Changer de répertoire courant#
##################################

fctchangerrepertoire(){
clear


#on se met dans le répertoire de travail courant
fctretourpwd

#j'utilise la fonction fctshowlsREP()
fctshowlsREP

fctcirculer

echo "Taper sur une touche pour revenir au menu"
read var
fctg_systeme

}

###########################
#Circuler dans répertoires#
###########################


fctcirculer(){

echo "Taper le numéro du répertoir dans lequel vous voulez vous déplacer"

#affecte a la variable var2 la valeur lue au clavier
read var2



#si la variable est 1 on reste dans le répertoire courant
if [ $var2 -eq 1 ];
then echo"Vous avez choisi de rester dans le répertoire courant"


#si la variable est 2 on remonte dans la hierarchie
elif [ $var2 -eq 2 ];
then cd ../
echo "Vous etes actuellement dans le repertoire $PWD "


#si la variable correspond a un des repertoire existant de notre dossier
else
cd /script/interface_gestion/temp
repfils=`awk -v "awkvar=$var2" 'NR==awkvar {print $8}' templs.txt`

fctretourpwd

cd $repfils
echo ""
echo "Vous etes maintenant dans le repertoire $PWD "
echo ""
fi

}

#########################
#3) Ajouter un repertoire #
#########################

fctajouterrepertoire() {
clear
fctretourpwd
echo "Taper le nom du repertoire que vous voulez creer:"
read nomfichier
mkdir -v $nomfichier
echo "Appuyer sur Entree pour revenir au menu "
read var
fctg_systeme
}

###########################
#4) Supprimer un repertoire #
###########################

fctsupprimerrepertoire() {
clear
#on se met dans le répertoire de travail courant
fctretourpwd

#j'utilise la fonction fctshowlsREP()
fctshowlsREP
echo -n "Votre choix : "
read choix
cd /script/interface_gestion/temp
nomfichier=`awk -v "awkvar=$choix" 'NR==awkvar { print $8 }' templs.txt`
echo "Appuyer sur une Entree pour valider la suppression de ce fichier"
read var
fctretourpwd
rm -Rf $nomfichier
echo "Le dossier a été supprime avec succes (Entrer pour revenir au menu)"
read var
fctg_systeme
}

#########################################
#5) Copier un repertoire et son contenu #
#########################################

fctcopierrepetsoncontenu() {

clear

#initialisation, récupération des variables



varpwddepart=`pwd`
cd /script/interface_gestion/temp
read < fichiercible.txt
cible=$REPLY
read < fichierpwdcible.txt
pwdcible=$REPLY
read < cibleetablie.txt
vartest=$REPLY

#on se met dans le répertoire de travail courant
fctretourpwd
#j'utilise la fonction fctshowlsREP()
fctshowlsREP

#test déja lancé et a établi une cible
#si non
if [ $vartest -eq 0 ];



then
echo "Selectionner le repertoire que vous voulez copier , 'C' pour changer de répertoir ou 'Q' pour quitter: "
read var;
if [ $var = "C" ] || [ $var = "c" ];
then fctcirculer
fctstockpwd
fctcopierrepetsoncontenu


elif [ $var != "Q" ];
then varpwdcible=`pwd`
cd /script/interface_gestion/temp
cible=`awk -v "awkvar=$var" 'NR==awkvar {print $8}' templs.txt`
echo "1" > cibleetablie.txt
echo $cible > fichiercible.txt
echo $varpwdcible > fichierpwdcible.txt
fctcopierrepetsoncontenu
fi
#si oui
else

echo "Selectionner le repertoire dans lequel vous vouler effectuer la copie de $cible, 'C' pour changer de répertoir ou 'Q' pour quitter: "

read var2
if [ $var2 = "C" ] || [ $var2 = "c" ];
then fctcirculer
fctstockpwd
fctcopierrepetsoncontenu


elif [ $var2 != "Q" ];
then
varpwdcible2=`pwd`
cd /script/interface_gestion/temp
cible2=`awk -v "awkvar=$var" 'NR==awkvar {print $8}' templs.txt`


cd $varpwddepart
cp -R $pwdcible/$cible $varpwdcible2/$cible2

echo "Copie terminee"
cd $varpwdcible2
fctshowlsREP
#init à 0 test déjà lancé
echo "0" > cibleetablie.txt
fi


fi

echo "Taper sur une touche pour revenir au menu"
read var
fctg_systeme
}


###########################
#6) Renommer un répertoire#
###########################

fctrenommerrepertoire() {
clear

#on se met dans le répertoire de travail courant
fctretourpwd

#j'utilise la fonction fctshowlsREP()
fctshowlsREP

echo "Taper le numéro du répertoire à renommer ou 'Q' pour quitter: "
read choix
cd /script/interface_gestion/temp
if [ $var != "Q" ];
then

nom1=`awk -v "awkvar=$choix" 'NR==awkvar {print $8}' templs.txt`

echo "Taper le nom qui remplacera $nom1 puis taper sur Entrée"

#entrée du nom de remplacement

read nom2

fctretourpwd

echo "Voulez vous vraiment renommer $nom1 par $nom2 ? si oui, taper 'o'"
read verif

if [ $verif == "O" ] || [ $verif = "o" ];
then mv $nom1 $nom2
echo "Renommage effectué"

else echo "Renommage abandonné"

fi
fi
echo "Taper sur une touche pour revenir au menu"
read var
fctg_systeme
}

################################################
#7) Créer un lien symbolique pour un repertoire#
################################################

fctlienrepertoire() {
clear
#initialisation, récupération des variables

echo "1"



cd /script/interface_gestion/temp
read < fichiercible.txt
varpwddepartenreg=$REPLY
read < cibleetablie.txt
vartest=$REPLY

#on se met dans le répertoire de travail courant
fctretourpwd
varpwddepart=`pwd`
#j'utilise la fonction fctshowlsREP()
fctshowlsREP

#test déja lancé et a établi une cible
#si non
if [ $vartest -eq 0 ];

then
echo "test non"
cd /script/interface_gestion/temp
echo $varpwddepart > fichiercible.txt
echo "1" > cibleetablie.txt
fctlienrepertoire
#si oui
else
echo "test oui"
echo "Le lien sera créé dans le répertoire $varpwddepartenreg ."
echo "Taper le numéro du répertoire qui sera la cible lien, 'C' pour changer de répertoir ou 'Q' pour quitter: "

read var

if [ $var = "C" ] || [ $var = "c" ];
then fctcirculer
fctstockpwd
fctlienrepertoire


elif [ $var != "Q" ];
then
varcible=`pwd`

cd /script/interface_gestion/temp
cible=`awk -v "awkvar=$var" 'NR==awkvar {print $8}' templs.txt`

echo "Taper le nom du lien pour la cible $cible puis taper sur Entrée"

read nom2

echo "Voulez vous vraiment créer pour la cible $cible le lien $nom2 ? si oui, taper 'o'"
read verif

if [ $verif == "O" ] || [ $verif == "o" ];

then
cd $varpwddepartenreg
ln -s $varcible/$cible $nom2
echo "Lien effectué"

else echo "Lien abandonné"

fi
fi
echo "0" > cibleetablie.txt
fi
echo "Taper sur une touche pour revenir au menu"
read var
fctg_systeme

}

#######################
#8) Copier un fichier #
#######################

fctcpfichier() {
clear



cd /script/interface_gestion/temp

read < fichiercible.txt
fichier=$REPLY
read < fichierpwdcible.txt
pwdcible=$REPLY
read < cibleetablie.txt
vartest=$REPLY

#on se met dans le répertoire de travail courant
fctretourpwd

varpwddepart=`pwd`

if [ $vartest -eq 0 ];
then
#j'utilise la fonction fctshowls()
fctshowls

echo "Selectionner le fichier du repertoire courant que vous voulez copier "
read var
varpwdcible=`pwd`
cd /script/interface_gestion/temp
fichier=`awk -v "awkvar=$var" 'NR==awkvar { print $1 }' templsf.txt`
echo "1" > cibleetablie.txt
echo $fichier > fichiercible.txt
echo $varpwdcible > fichierpwdcible.txt
fctretourpwd
fctcpfichier

else
#j'utilise la fonction fctshowlsREP()
fctshowlsREP
echo "Selectionner le repertoire dans lequel vous vouler effectuer la copie de $fichier, 'C' pour changer de répertoir ou 'Q' pour quitter: "

read var

if [ $var = "C" ] || [ $var = "c" ];
then fctcirculer
fctstockpwd
fctcpfichier


elif [ $var != "Q" ];
then
varpwdcible=`pwd`
cd /script/interface_gestion/temp
cible=`awk -v "awkvar=$var" 'NR==awkvar {print $8}' templs.txt`




cd $varpwddepart

cp $pwdcible/$fichier $varpwdcible/$cible
echo
echo "Le fichier a été copié dans le repertoire choisi "
cd /script/interface_gestion/temp
echo "1" > cibleetablie.txt
cd $varpwddepart
fi
fi
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
fctg_systeme
}


#########################
#9) Renommer un fichier #
#########################

fctrenommerfichier() {
clear
#on se met dans le répertoire de travail courant
fctretourpwd
#j'utilise la fonction fctshowlsREP()
fctshowls
echo "Selectionner le fichier que vous voulez renommer "
read var
cd /script/interface_gestion/temp
cible=`awk -v "awkvar=$var" 'NR==awkvar {print $0}' templsf.txt`
fctretourpwd
echo "Veuillez saisir le nouveau nom du fichier "
echo
echo -n "Nouveau Nom : "
read nvnom
echo
mv $cible $nvnom
echo "Le changement de nom a ete effectue "
echo "Appuyer sur Entree pour revenir au menu "
read var
fctg_systeme

}

#################################################
#10) Creer un lien supplementaire sur un fichier #
#################################################

fctlienfichier() {
clear
#on se met dans le répertoire de travail courant
fctretourpwd

#j'utilise la fonction fctshowls()
fctshowls
echo "Selectionner le fichier du repertoire courant sur lequel vous voulez faire une lien "
echo -n "Choix : "
read var
cd /script/interface_gestion/temp
fichier=`awk -v "awkvar=$var" 'NR==awkvar { print $0 }' templfs.txt`

echo
echo "Veuillez saisir le nom du lien supplémentaire"
echo -n "Nom du lien : "
read var
ln -s $fichier $var
echo "Lien cree"
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
fctg_systeme
}

#########################
#11) Effacer un fichier #
#########################

fctsupprimerfichier() {
clear
#on se met dans le répertoire de travail courant
fctretourpwd

#j'utilise la fonction fctshowlsf()
fctshowls
echo "Selectionner le fichier sur lequel vous voulez faire une lien "


echo -n "Choix : "
read var
cd /script/interface_gestion/temp
fichier=`awk -v "awkvar=$var" 'NR==awkvar { print $1 }' templsf.txt`

echo "Appuyer sur une Entree pour valider la suppression de ce fichier"
read var
fctretourpwd
rm -R $fichier
echo "Le dossier a été supprime avec succes (Entrer pour revenir au menu)"
read var
fctg_systeme
}

##############################################
#12) Effacer tous les fichiers du repertoire #
##############################################

fcteffacertslsfichierrepertoire() {
clear

#on se met dans le répertoire de travail courant
fctretourpwd

#j'utilise la fonction fctshowlsREP()
fctshowlsREP
echo "Selectionner le repertoire du chemin courant dans lequel vous voulez supprimer son contenu "
echo -n "Choix : "

read var
cd /script/interface_gestion/temp
fichier=`awk -v "awkvar=$var" 'NR==awkvar { print $8 }' templs.txt`
echo
echo "Appuyer sur Entree pour proceder a la suppression de tous les fichiers se trouvant dans le dossier selectionne "
read x
ctretourpwd
cd $fichier
rm *.*
echo "Suppression terminee "
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
cd ..
fctg_systeme
}


#######################################################
# 13) Modifier les droits sur un fichier ou un repertoire #
#######################################################

fctmodifierdroits() {
clear
echo "Sur quoi voulez vous modifier les droits ? "
echo
echo "1) Un dossier "
echo "2) Un fichier "
echo
echo -n "Votre Choix : "
read var

case $var in
"1") {

clear
ls -d */ > /script/interface_gestion/temptemp4.txt
echo "Voici la liste des dossiers : "
echo
cd /script/interface_gestion/temp
awk '{ print NR, $0 }' temp4.txt
echo
echo -n "Votre choix : "
read var
awk -v "awkvar=$var" 'NR==awkvar { print $1 }' temp4.txt > temp5
echo
echo "Quels droits voulez vous attribuer a ce dossier ? "

echo
echo "Droit pour Proprietaire : "
echo "Lecture : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read PdroitL
cd /script/interface_gestion
case $PdroitL in
"1") echo "Droit de Lecture OK " && PtdroitL=4 ;;
"2") echo "Pas de Droit de Lecture " && PtdroitL=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var
echo
echo "Ecriture"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read PdroitE
cd /script/interface_gestion
case $PdroitE in
"1") echo "Droit d'Ecriture OK " && PtdroitE=4 ;;
"2") echo "Pas de Droit d'Ecriture " && PtdroitE=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var
echo
echo "Execution"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read PdroitEx
cd /script/interface_gestion
case $PdroitEx in
"1") echo "Droit d'Execution OK " && PdroitEx=4 ;;
"2") echo "Pas de Droit d'Execution " && PdroitEx=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac
read var


echo
echo "Droit pour Groupe : "
echo "Lecture : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read GdroitL
cd /script/interface_gestion
case $GdroitL in
"1") echo "Droit de Lecture OK " && GdroitL=2 ;;
"2") echo "Pas de Droit de Lecture " && GdroitL=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac


read var
echo
echo "Ecriture"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read GdroitE
cd /script/interface_gestion
case $GdroitE in
"1") echo "Droit d'Ecriture OK " && GdroitE=2 ;;
"2") echo "Pas de Droit d'Ecriture " && GdroitE=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var
echo
echo "Execution"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read GdroitEx
cd /script/interface_gestion
case $GdroitEx in
"1") echo "Droit d'Execution OK " && GdroitEx=2 ;;
"2") echo "Pas de Droit d'Execution " && GdroitEx=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac
read var

echo
echo "Droit pour Autre : "
echo "Lecture : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read AdroitL
cd /script/interface_gestion
case $AdroitL in
"1") echo "Droit de Lecture OK " && AdroitL=1 ;;
"2") echo "Pas de Droit de Lecture " && AdroitL=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac


read var
echo
echo "Ecriture"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read AdroitE
cd /script/interface_gestion
case $AdroitE in
"1") echo "Droit d'Ecriture OK " && AdroitE=1 ;;
"2") echo "Pas de Droit d'Ecriture " && AdroitE=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var
echo
echo "Execution"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read AdroitEx
cd /script/interface_gestion
case $AdroitEx in
"1") echo "Droit d'Execution OK " && AdroitEx=1 ;;
"2") echo "Pas de Droit d'Execution " && AdroitEx=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

let droitchiffre1=$PdroitL+$PdroitE+$PdroitEx
let droitchiffre2=$GdroitL+$GdroitE+$GdroitEx
let droitchiffre3=$AdroitL+$AdroitE+$AdroitEx

chmod $droitchiffre1$droitchiffre2$droitchiffre3 `cat temp5`
echo "Droits effectues "
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
cd /script/interface_gestion
./gestion_systeme.sh

read var2
} ;;

"2") {
clear
echo "Vous etes actuellement dans le repertoire $PWD "
echo "Voici la liste des fichiers "
ls * > /script/interface_gestion/temp/temp8.txt
echo
cd /script/interface_gestion/temp
awk '{ print NR, $0 }' temp8.txt |more
echo
echo -n "Choix : "
read var
awk -v "awkvar=$var" 'NR==awkvar { print $1 }' temp8.txt > temp9
echo
echo "Quels droits voulez vous attribuer a ce fichier ? "
read var2

echo
echo "Droit pour Proprietaire : "
echo "Lecture : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read PdroitL
cd /script/interface_gestion
case $PdroitL in
"1") echo "Droit de Lecture OK " && PtdroitL=4 ;;
"2") echo "Pas de Droit de Lecture " && PtdroitL=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac


read var
echo
echo "Ecriture"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read PdroitE
cd /script/interface_gestion
case $PdroitE in
"1") echo "Droit d'Ecriture OK " && PtdroitE=4 ;;
"2") echo "Pas de Droit d'Ecriture " && PtdroitE=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var
echo
echo "Execution"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read PdroitEx
cd /script/interface_gestion
case $PdroitEx in
"1") echo "Droit d'Execution OK " && PdroitEx=4 ;;
"2") echo "Pas de Droit d'Execution " && PdroitEx=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac


read var2
echo
echo "Droit pour Groupe : "
echo "Lecture : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read GdroitL
cd /script/interface_gestion
case $GdroitL in
"1") echo "Droit de Lecture OK " && GdroitL=2 ;;
"2") echo "Pas de Droit de Lecture " && GdroitL=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac


read var
echo
echo "Ecriture"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read GdroitE
cd /script/interface_gestion
case $GdroitE in
"1") echo "Droit d'Ecriture OK " && GdroitE=2 ;;
"2") echo "Pas de Droit d'Ecriture " && GdroitE=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var
echo
echo "Execution"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read GdroitEx
cd /script/interface_gestion
case $GdroitEx in
"1") echo "Droit d'Execution OK " && GdroitEx=2 ;;
"2") echo "Pas de Droit d'Execution " && GdroitEx=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var2
echo
echo "Droit pour Autre : "
echo "Lecture : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read AdroitL
cd /script/interface_gestion
case $AdroitL in
"1") echo "Droit de Lecture OK " && AdroitL=1 ;;
"2") echo "Pas de Droit de Lecture " && AdroitL=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac


read var
echo
echo "Ecriture"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read AdroitE
cd /script/interface_gestion
case $AdroitE in
"1") echo "Droit d'Ecriture OK " && AdroitE=1 ;;
"2") echo "Pas de Droit d'Ecriture " && AdroitE=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

read var
echo
echo "Execution"
echo "1) Oui "
echo "2) Non "
echo
echo -n "Votre Choix : "
read AdroitEx
cd /script/interface_gestion
case $AdroitEx in
"1") echo "Droit d'Execution OK " && AdroitEx=1 ;;
"2") echo "Pas de Droit d'Execution " && AdroitEx=0 ;;
*) echo "Erreur de saisie " && read var && ./gestion_systeme.sh ;;
esac

let droitchiffre1=$PdroitL+$PdroitE+$PdroitEx
let droitchiffre2=$GdroitL+$GdroitE+$GdroitEx
let droitchiffre3=$AdroitL+$AdroitE+$AdroitEx

chmod $droitchiffre1$droitchiffre2$droitchiffre3 `cat temp9`
echo "Droits effectues "
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
cd /script/interface_gestion
./gestion_systeme.sh

} ;;

*) echo "Veuillez saisir un chiffre entre 1 et 2 (Appuyer sur Entree) " && read var5 && ./gestion_systeme.sh ;;
esac

}

##########################################################
#14) Modifier le proprietaire d'un fichier ou un repertoire #
##########################################################

fctmodifierproprietaire() {
clear
echo "Sur quoi voulez vous modifier les droits ? "
echo
echo "1) Un dossier "
echo "2) Un fichier "
echo
echo -n "Votre Choix : "
read var

case $var in
"1") {
clear
ls -d */ > /script/interface_gestion/temp/temp4.txt
echo "Voici la liste des dossier : "
echo
cd /script/interface_gestion/temp
awk '{ print NR, $0 }' temp4.txt
echo
echo -n "Votre choix : "
read var
awk -v "awkvar=$var" 'NR==awkvar { print $1 }' temp4.txt > temp5

clear
echo "Voici la liste des utilisateurs : "
echo
cat /etc/passwd |grep '/bash' > /script/interface_gestion/temp/users.txt
cd /script/interface_gestion/temp
awk -F ":" '{ print NR, $1 }' users.txt |more
echo
echo -n "Choix : "
read choix
awk -F ":" -v "awkvar=$choix" 'NR==awkvar { print $1 }' users.txt > users

sudo chown -v $choix `cat temp5`
echo "Changement de proprietaire effectue "
echo
echo "Appuyer sur Entree pour revenir au menu "
read va
cd /script/interface_gestion
./gestion_systeme.sh

} ;;
"2") {
clear
echo "Vous etes actuellement dans le repertoire $PWD "
echo "Selectionner le fichier sur lequel vous voulez faire une lien "
ls * > /script/interface_gestion/temp/temp8.txt
cd /script/interface_gestion/temp
awk '{ print NR, $0 }' temp8.txt |more
echo -n "Choix : "
read var3
awk -v "awkvar=$var" 'NR==awkvar { print $1 }' temp8.txt > temp9
clear
echo "Voici la liste des utilisateurs : "
echo
cat /etc/passwd |grep '/bash' > /script/interface_gestion/temp/users.txt
cd /script/interface_gestion/temp
awk -F ":" '{ print NR, $1 }' users.txt |more
echo
echo -n "Choix : "
read choix
awk -F ":" -v "awkvar=$choix" 'NR==awkvar { print $1 }' users.txt > users
sudo chown -v $choix `cat temp9`
echo "Changement de proprietaire effectue "
echo
echo "Appuyer sur Entree pour revenir au menu "
read va
cd /script/interface_gestion
./gestion_systeme.sh
} ;;
*) cd /script/interface_gestion
echo "Veuillez saisir un chiffre entre 1 et 2 (Appuyer sur Entree) " && read var5 && ./gestion_systeme.sh ;;
esac
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
./gestion_systeme.sh
}

####################################################
#15) Modifier le groupe d'un fichier ou un repertoire #
####################################################

fctmodifiergroupe() {
clear
echo "Sur quoi voulez vous modifier les droits ? "
echo
echo "1) Un dossier "
echo "2) Un fichier "
echo
echo -n "Votre Choix : "
read var
case $var in
"1") {
clear
ls -d */ > /script/interface_gestion/temp/temp4.txt
echo "Voici la liste des dossier : "
echo
cd /script/interface_gestion/temp
awk '{ print NR, $0 }' temp4.txt
echo
echo -n "Votre choix : "
read var
awk -v "awkvar=$var" 'NR==awkvar { print $1 }' temp4.txt > temp5
echo "Veuillez choisir le nom du groupe :"

cat /etc/group > /script/interface_gestion/temp/group.txt
awk -F ":" '{ print NR, $1 }' group.txt |more
echo
echo -n "Choix : "
read var
cd /script/interface_gestion/temp
awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' group.txt > group2.txt
awk -F ":" -v "awkvar2=$var" 'NR==awkvar2 { print $3 }' group.txt > numgroup.txt
read < group2.txt
clear

sudo chown :$REPLY `cat temp5`
echo "Changement de groupe effectue "
echo "Appuyer sur Entree pour revenir au menu "
read va
cd /script/interface_gestion
./gestion_systeme.sh

} ;;
"2") {
clear
echo "Vous etes actuellement dans le repertoire $PWD "
echo "Selectionner le fichier sur lequel vous voulez faire une lien "
ls * > /script/interface_gestion/temp/temp8.txt
cd /script/interface_gestion/temp
awk '{ print NR, $0 }' temp8.txt
echo -n "Choix : "
read var3
awk -v "awkvar=$var" 'NR==awkvar { print $1 }' temp8.txt > temp9
echo
eecho "Veuillez choisir le nom du groupe :"

cat /etc/group > /script/interface_gestion/temp/group.txt
cd /script/interface_gestion/temp
awk -F ":" '{ print NR, $1 }' group.txt |more
echo -n "Choix : "
read var
awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' group.txt > group2.txt
awk -F ":" -v "awkvar2=$var" 'NR==awkvar2 { print $3 }' group.txt > numgroup.txt
read < group2.txt
clear

read var3
sudo chown :$REPLY `cat temp9`
echo "Changement de groupe effectue "
echo "Appuyer sur Entree pour revenir au menu "
read va
} ;;
*) cd /script/interface_gestion
echo "Veuillez saisir un chiffre entre 1 et 2 (Appuyer sur Entree) " && read var5 && ./gestion_systeme.sh ;;
esac
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
cd ..
./gestion_systeme.sh
}


echo "###############################################################"
echo "# MENU #"
echo "###############################################################"
echo ""
echo "1) Lister le repertoire courant "
echo "2) Changer de répertoire courant "
echo "3) Ajouter un repertoire "
echo "4) Supprimer un repertoire "
echo "5) Copier un repertoire et son contenu "
echo "6) Renommer un repertoire "
echo "7) Créer un lien symbolique sur un repertoire "
echo "8) Copier un fichier "
echo "9) Renommer un fichier "
echo "10) Créer un lien supplémentaire sur un fichier "
echo "11) Effacer un fichier "
echo "12) Effacer tous les fichiers du répertoire "
echo "13) Modifier les droits sur un fichier ou sur un repertoire "
echo "14) Modifier le proprietaire d'un fichier ou d'un repertoire "
echo "15) Modifier le groupe d'un fichier ou d'un repertoire "
echo "16) Revenir au Menu principale "
echo "17) Quittez "

read choix

case $choix in
"1") fctlisterrepertoircourant ;;
"2") fctchangerrepertoire ;;
"3") fctajouterrepertoire ;;
"4") fctsupprimerrepertoire ;;
"5") fctcopierrepetsoncontenu ;;
"6") fctrenommerrepertoire ;;
"7") fctlienrepertoire ;;
"8") fctcpfichier;;
"9") fctrenommerfichier ;;
"10") fctlienfichier ;;
"11") fctsupprimerfichier ;;
"12") fcteffacertslsfichierrepertoire ;;
"13") fctmodifierdroits ;;
"14") fctmodifierproprietaire ;;
"15") fctmodifiergroupe ;;
"16") cd /script/interface_gestion/
./Menu.sh ;;
"17") echo "bye bye" ;;
*) echo "Veuillez saisir un chiffre entre 1 et 4" && read var && ./Menu.sh ;;
esac


gestion_processus :
#!/bin/bash
# Fichier "Gestion du systeme de fichier.sh"

clear

####################################
# Lister tous les processus actifs #
####################################

listerprocessus() {
clear
echo "Appuyer sur Entree pour lister les processus "
read var
ps ax|more
echo "Appuyer sur Entree pour revenir au menu "
read var
cd script/interface_gestion/
./gestion_processus.sh
}

#############################################
# Lister les processus pour un utilisateur #
#############################################

listerprocessususer() {
clear
echo "Voici la liste des utilisateurs : "
cat /etc/passwd |grep '/bash' > /script/interface_gestion/temp/users.txt
cd /script/interface_gestion/temp
awk -F ":" '{ print NR, $1 }' users.txt
echo -n "Choix : "
read var
awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users
ps aux |grep `cat users`
echo "Appuyer sur Entree pour revenir au menu "
read var
cd /script/interface_gestion/
./gestion_processus.sh
}

########################
# Arreter un processus #
########################

arreterprocessus() {
clear
echo "Voici la liste des processus : "
ps -e
#sed '1d' processus.txt > processus2.txt
echo "Veuillez ecrire le numéro PID du processus que vous voulez arreter"
echo
echo -n "Choix : "
read choix
echo "Appuyer sur Entrer pour valider l'arret du processus selectionne "
read var
kill $choix
echo "Appuyer sur Entree pour revenir au menu "
read var
cd script/interface_gestion/
./gestion_processus.sh
}

########################
# Arreter le système#
########################

arretersysteme() {
clear
echo "Appuyer sur Entrer pour valider l'arret du systeme "
read var
echo "Arret du systeme en cours"
sudo init 0
}


echo "###############################################################"
echo "# Gestion du systeme de fichier #"
echo "###############################################################"
echo ""
echo "1) Lister tous les processus actifs "
echo "2) Lister les processus pour un utilisateur "
echo "3) Arreter un processus "
echo "4) Arreter le systeme "
echo "5) Revenir au menu principal "
echo "6) Quittez "
echo
echo -n "Votre choix : "
read choix

case $choix in
"1") listerprocessus ;;
"2") listerprocessususer ;;
"3") arreterprocessus ;;
"4") arretersysteme ;;
"5") ./Menu.sh ;;
"6") clear && echo "Au revoir " && exit ;;
*) cd script/interface_gestion/
echo "Veuillez saisir un chiffre entre 1 et 6 (Touche Entree pour revenir au menu)" && read var && ./gestion_processus.sh ;;
esac


gestion_utilisateurs :

#!/bin/bash
# Fichier "Gestion du systeme de fichier.sh"

clear

###############################
# Creer un compte utilisateur #
###############################

creerutilisateur() {
clear
echo "Ajout d'un utilisateur "
echo
echo "Veuillez ecrire le nom du nouvel utilisateur, puis remplir les champs demandés"
echo -n "Nom : "
read newuser
sudo adduser $newuser

echo "Appuyer sur Entree pour revenir au menu "
read var
cd script/interface_gestion/
./gestion_utilisateurs.sh
}

###################################
# Supprimer un compte utilisateur #
###################################

supprimercompte() {
clear
echo "Voici la liste des utilisateurs : "
cat /etc/passwd |grep '/bash' > /script/interface_gestion/temp/users.txt
cd script/interface_gestion/temp
awk -F ":" '{ print NR, $1 }' users.txt
echo -n "Choix : "
read var
awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users
sudo userdel -r `cat users`
echo "Utilisateur supprimé "
echo
echo "Appuyer sur Entree pour revenir au menu "
read var
cd script/interface_gestion/
./gestion_utilisateurs.sh
}

#############################################
# Creer les comptes pour une promo d'eleves #
#############################################

creercomptespromo() {
clear
echo "Ajout d'un groupe "
echo
echo "Veuillez ecrire le nom du nouveau groupe, puis remplir les champs demandés "
echo -n "Nom du groupe : "
read newgroup
sudo groupadd $newgroup
echo
echo "Le nouveau groupe "$newgroup "a ete cree "
echo

echo "Voulez creer un utilisateur : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Choix : "
read oui
while test $oui == 1
do
echo
echo "Veuillez ecrire le nom du nouvel utilisateur, puis remplir les champs demandés"
echo -n "Nom : "
read newuser
sudo useradd -s /bin/bash -g $newgroup -m -k /dev/null $newuser

echo
echo "Utilisateur cree "



echo
echo "Voulez creer un utilisateur : "
echo "1) Oui "
echo "2) Non "
echo
echo -n "Choix : "
read oui

done
echo "Appuyer sur Entree pour revenir au menu "
read var
cd script/interface_gestion/
./gestion_utilisateurs.sh
}

#################################################
# Supprimer les comptes pour une promo d'eleves #
#################################################

supprimercomptespromo() {
clear
echo "Voici la liste des groupes : "
cat /etc/group > /script/interface_gestion/temp/group.txt
cd script/interface_gestion/temp
awk -F ":" '{ print NR, $1 }' group.txt
echo -n "Choix : "
read var
awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' group.txt > group2.txt
awk -F ":" -v "awkvar2=$var" 'NR==awkvar2 { print $3 }' group.txt > numgroup.txt
read < numgroup.txt
clear
echo "Voici tous les utilisateurs du groupe : "
cat /etc/passwd |grep $REPLY > cd script/interface_gestion/temp/numgroup2.txt
cd script/interface_gestion/temp/
awk -F ":" '{ print $1 }' numgroup2.txt > numgroup3.txt
cat numgroup3.txt
echo
echo "Appuyer sur Entree pour supprimer tous ces utilisateurs "
read toto
for i in $(cat numgroup3.txt) ;
do
sudo userdel -r $i
done
echo "Tous les Utilisateurs ont ete supprimés "
echo
echo "Appuyer sur Entree pour supprimer le compte "

read < /script/interface_gestion/group2.txt
sudo delgroup $REPLY
echo "Le groupe a ete supprime"
echo
echo "Appuyer sur Entree pour revenir au menu "
read toto
cd script/interface_gestion/
./gestion_utilisateurs.sh



}

###########################################################
# Envoyer un message immediat sur l'ecran d'un ordinateur #
###########################################################

envoyemessageuser() {
clear
echo "Voici la liste des utilisateurs (Vous ne pouvez pas envoyer de message a 'root') : "
cat /etc/passwd |grep '/bash' > /script/interface_gestion/temp/users.txt
cd cd script/interface_gestion/temp/
awk -F ":" '{ print NR, $1 }' users.txt
echo
echo -n "Choix : "
read var
awk -F ":" -v "awkvar=$var" 'NR==awkvar { print $1 }' users.txt > users2.txt
echo
echo "Veuillez taper votre message "
echo -n " Message a envoyer : "
read message
echo "$message" > message.txt
read < users2.txt
`cat message.txt | write $REPLY`
echo
echo "Appuyer sur Entree pour revenir au menu "
read toto
cd script/interface_gestion/
./gestion_utilisateurs.sh
}

############################################################
# Envoyer un message immediat sur l'ecran d'un utilisateur #
############################################################

envoyemessagemonde() {
clear
echo "Veuillez taper votre message "
echo -n " Message a envoyer : "
read message2
echo "$message2" > /script/interface_gestion/temp/message2.txt
sudo wall message2.txt
echo
echo "Appuyer sur Entree pour revenir au menu "
read toto
cd script/interface_gestion/
./gestion_utilisateurs.sh
}

echo "###############################################################"
echo "# Gestion du systeme de fichier #"
echo "###############################################################"
echo ""
echo "1) Creer un compte utilisateur "
echo "2) Supprimer un compte utilisateur "
echo "3) Creer les comptes pour une promo d'eleves "
echo "4) Supprimer les comptes pour une promo d'eleves "
echo "5) Envoyer un message immediat sur l'ecran d'un ordinateur "
echo "6) Envoyer un message immediat sur l'ecran d'un utilisateur "
echo "7) Revenir au menu principal "
echo "8) Quitter "
echo
echo -n "Votre choix : "
read choix

case $choix in
"1") creerutilisateur ;;
"2") supprimercompte ;;
"3") creercomptespromo ;;
"4") supprimercomptespromo ;;
"5") envoyemessageuser ;;
"6") envoyemessagemonde ;;
"7") ./Menu.sh ;;
"8") clear && echo "Au revoir " && exit ;;
*) echo "Veuillez saisir un chiffre entre 1 et 8 (Touche Entree pour revenir au menu)" && read var && ./gestion_processus.sh ;;
esac

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Voilà, c'est fini, nous avons eu 3 jours pour le faire.
Si y a des motivés pour jeter un coup d'oeil à ce code, et me conseillé certaines améliorations, c'est le bienvenue.

Si vous ne comprennais pas certaines parties du code, je peux vous expliquer.

Bien cordialement,

Zjulkerw

Configuration: Windows Vista
Firefox 2.0.0.3

Meilleures réponses pour « [Shell Bash] Exercice Complet » dans :
Le remplacement de variables en shell Bash Voir=Le remplacement de variables= Introduction Il peut s'avérer utile de s'assurer qu'une variable est bien définie avant de procéder à son remplacement, ou tout simplement de s'assurer que celle-ci n'est pas vide, et dans ce cas de l'initialiser avec...
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
Coloration du shell (bash) VoirPourquoi le faire? Quelles informations peuvent être transmises par les couleurs? Les techniques Technique de tput Pourquoi le faire? En personnalisant la couleur des caractères de l'invite (ou du shell), vous la rendez plus lisible. Si...
Systèmes UNIX - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système...

1

 laurenzo6983, le 7 déc 2007 à 01:14:07

J'aimerai savoir s'il est possible de renommer un repertoire avec le shell bash
Ton exemple est franchement interessant mais j'aimerai savoir si avec un bout de ton code je pourrai renommer un repertoire sans utiliser le /lib utilisé par le /bin/sh et autre fichier binaire...

Répondre à laurenzo6983