Erreur script shell
bonjour,
lorsque je veux exécuter le scripte suivant il le terminal m'affiche se msg

voici le scripte:
merci d'avance.......
lorsque je veux exécuter le scripte suivant il le terminal m'affiche se msg
voici le scripte:
#!/bin/bash
refus()
{
echo Ne pas interrompre le programme...
}
ajout()
{
read -p"Nom : " nom
read -p"Prenom : " prenom
read -p"Numero de telephone : " tel
read -p"Bureau : " buro
read -p"Service : " serv
echo "$nom:$prenom:$tel:$buro:$serv"
echo "Confirmez-vous ? (o/n)"
read reponse
case "$reponse" in
o|oui) echo "$nom:$prenom:$tel:$buro:$serv" >>$Annuaire
echo Utilisateur $nom enregistré;;
n|non) echo "Information NON enregistrée"
;;
esac
}
eclat()
{
for f in $(cut -d: -f5 $Annuaire | sort -u)
do
grep $f $Annuaire >>$f
done
}
# Debut du programme
trap "refus" 2 3 15
if [ $# -lt 1 ]
then echo "Syntaxe : $(basename $0) [-opt] Nom_Annuaire" 1>&2;
exit 1
fi
eval Annuaire=\${$#}
if [[ ! -e "$Annuaire" || ! -r "$Annuaire" ]]
then echo "\"$Annuaire\" devrait être le nom d'un fichier annuaire lisible"
exit
fi
if [ $# -eq 1 ]
then sort "$Annuaire"
else
case $1 in
-t) sort -t: -k 5 -k 1 "$Annuaire";;
-T) sort -t: -k 3n "$Annuaire";;
-M) cut -d: -f1 "$Annuaire";;
-d) tail -1 "$Annuaire";;
-m) tr ':' '.' <"$Annuaire" | cut -d. -f1,2;;
-a) ajout;;
-g) if [ $# -ne 3 ]
then echo "Syntaxe : $(basename $0) -g nom Nom_Annuaire" 1>&2;
exit 1
else
grep -i "^[^:]*$2[^:]*:" "$Annuaire"
fi;;
-e) eclat;;
-s) if [ $# -ne 3 ]
then echo "Syntaxe : $(basename $0) -s Nom Nom_Annuaire" 1>&2;
exit 1
else
if grep "^$2" $Annuaire >/dev/null 2>&1
then
grep -v "^$2" $Annuaire >/tmp/ann.$$
mv $Annuaire ${Annuaire}.old
mv /tmp/ann.$$ $Annuaire
echo $2 supprime
else
echo "L'utilisateur $2 n'est pas inscrit"
fi
fi;;
-b) if [ $# -ne 3 ]
then echo "Syntaxe : $(basename $0) -b X Nom_Annuaire" 1>&2;
exit 1
else
grep "^[^:]*:[^:]*:[^:]*:$2.*:" $Annuaire | cut -d: -f1|sort
fi;;
*) echo "Option ($1) inconnue";exit;;
esac
fi
merci d'avance.......
A voir également:
- Erreur script shell
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
5 réponses
Bonjour,
Donne les droits en exécution à ton fichier et exécute le sans
Bonne chance
Donne les droits en exécution à ton fichier et exécute le sans
bash:
chmod a+x annuaire.sh ./annuaire.sh
Bonne chance
Bonjour,
Inutile de faire des captures d'écran, un simple copier coller suffit et sera plus pratique te plus écologique. Pour commencer indente mieux ton fichier pour le rendre plus lisible :
À ce stade,
Tu peux rajouter un
Essaye de nous expliquer ce que le programme devrait faire...
Inutile de faire des captures d'écran, un simple copier coller suffit et sera plus pratique te plus écologique. Pour commencer indente mieux ton fichier pour le rendre plus lisible :
#!/bin/bash
refus()
{
echo Ne pas interrompre le programme...
}
ajout()
{
read -p"Nom : " nom
read -p"Prenom : " prenom
read -p"Numero de telephone : " tel
read -p"Bureau : " buro
read -p"Service : " serv
echo "$nom:$prenom:$tel:$buro:$serv"
echo "Confirmez-vous ? (o/n)"
read reponse
case "$reponse" in
o|oui)
echo "$nom:$prenom:$tel:$buro:$serv" >>$Annuaire
echo Utilisateur $nom enregistré
;;
n|non)
echo "Information NON enregistrée"
;;
esac
}
eclat()
{
for f in $(cut -d: -f5 $Annuaire | sort -u)
do
grep $f $Annuaire >>$f
done
}
# Debut du programme
trap "refus" 2 3 15
if [ $# -lt 1 ]
then echo "Syntaxe : $(basename $0) [-opt] Nom_Annuaire" 1>&2;
exit 1
fi
eval Annuaire=\${$#}
if [[ ! -e "$Annuaire" || ! -r "$Annuaire" ]]
then echo "\"$Annuaire\" devrait être le nom d'un fichier annuaire lisible"
exit
fi
if [ $# -eq 1 ]
then
sort "$Annuaire"
else
case $1 in
-t) sort -t: -k 5 -k 1 "$Annuaire";;
-T) sort -t: -k 3n "$Annuaire";;
-M) cut -d: -f1 "$Annuaire";;
-d) tail -1 "$Annuaire";;
-m) tr ':' '.' <"$Annuaire" | cut -d. -f1,2;;
-a) ajout;;
-g)
if [ $# -ne 3 ]
then echo "Syntaxe : $(basename $0) -g nom Nom_Annuaire" 1>&2;
exit 1
else
grep -i "^[^:]*$2[^:]*:" "$Annuaire"
fi
;;
-e) eclat;;
-s)
if [ $# -ne 3 ]
then
echo "Syntaxe : $(basename $0) -s Nom Nom_Annuaire" 1>&2;
exit 1
else
if grep "^$2" $Annuaire > /dev/null 2>&1
then
grep -v "^$2" $Annuaire >/tmp/ann.$$
mv $Annuaire ${Annuaire}.old
mv /tmp/ann.$$ $Annuaire
echo $2 supprime
else
echo "L'utilisateur $2 n'est pas inscrit"
fi
fi
;;
-b)
if [ $# -ne 3 ]
then
echo "Syntaxe : $(basename $0) -b X Nom_Annuaire" 1>&2;
exit 1
else
grep "^[^:]*:[^:]*:[^:]*:$2.*:" $Annuaire | cut -d: -f1 | sort
fi
;;
*) echo "Option ($1) inconnue" exit ;; esacfi
À ce stade,
./annuaire.sh -ate fait passer dans cette partie du code :
eval Annuaire=\${$#}
if [[ ! -e "$Annuaire" || ! -r "$Annuaire" ]]
then echo "\"$Annuaire\" devrait être le nom d'un fichier annuaire lisible"
exit
fi
Tu peux rajouter un
echo $Annuairepour comprendre ce qui se passe (en l'occurrence il vaudra
-a) et du coup il est normal que le test soit vrai et déclenche le
exit.
Essaye de nous expliquer ce que le programme devrait faire...
pour bien explique le programme c'est ne base de données des employées d'une entreprise dans la quelle on trouve 5 champs nom : prenom : tel : bureau : service
cette base de données doit avoir des options par exemple:
ajouter un nouvel inscrit (-a) , c'est à dire lors de l’exécution du programme avec l'option -a le terminal doit me donner la possibilité de remplir la base de données.
et cela pour toute les options que j'ai défini dans le script
afficher l'annuaire trié par service et par nom (-t)
afficher l'annuaire trié sur le numéro de téléphone (-T)
afficher la liste des noms des inscrits (-M)
afficher le dernier inscrit (-d)
afficher la liste des inscrits sous la forme Nom.Prénom (-m)
rechercher un inscrit à partir de son nom (-g bac) ou d'une partie seulement (-g bou) et sans distinction des majuscules/minuscules
ajouter un nouvel inscrit (-a)
créer un fichier par service (-e)
supprimer un inscrit (-s Bac)
lister le personnel d'un bâtiment (-b X). Le bâtiment est indiqué par la première lettre du bureau.
etc (selon votre imagination ou vos besoins).
cette base de données doit avoir des options par exemple:
ajouter un nouvel inscrit (-a) , c'est à dire lors de l’exécution du programme avec l'option -a le terminal doit me donner la possibilité de remplir la base de données.
et cela pour toute les options que j'ai défini dans le script
afficher l'annuaire trié par service et par nom (-t)
afficher l'annuaire trié sur le numéro de téléphone (-T)
afficher la liste des noms des inscrits (-M)
afficher le dernier inscrit (-d)
afficher la liste des inscrits sous la forme Nom.Prénom (-m)
rechercher un inscrit à partir de son nom (-g bac) ou d'une partie seulement (-g bou) et sans distinction des majuscules/minuscules
ajouter un nouvel inscrit (-a)
créer un fichier par service (-e)
supprimer un inscrit (-s Bac)
lister le personnel d'un bâtiment (-b X). Le bâtiment est indiqué par la première lettre du bureau.
etc (selon votre imagination ou vos besoins).
Salut,
On ne teste pas les arguments passés à un script avec un
On ne teste pas les arguments passés à un script avec un
case … esac, mais avec une fonction intégrée au bash nommée
getopts:
man -P "less -p \"^ +getopts \"" bash
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question