Erreur script shell
Fermé
ennouma_123
Messages postés
5
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020
-
Modifié le 18 mars 2020 à 13:41
mamiemando Messages postés 33435 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 décembre 2024 - 23 mars 2020 à 18:34
mamiemando Messages postés 33435 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 décembre 2024 - 23 mars 2020 à 18:34
A voir également:
- Erreur script shell
- Erreur 0x80070643 - Accueil - Windows
- Script vidéo youtube - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Classic shell windows 11 - Télécharger - Personnalisation
- Erreur 1001 outlook - Accueil - Bureautique
5 réponses
mamiemando
Messages postés
33435
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
18 décembre 2024
7 810
18 mars 2020 à 13:45
18 mars 2020 à 13:45
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
mamiemando
Messages postés
33435
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
18 décembre 2024
7 810
Modifié le 18 mars 2020 à 14:08
Modifié le 18 mars 2020 à 14:08
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...
ennouma_123
Messages postés
5
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020
18 mars 2020 à 21:24
18 mars 2020 à 21:24
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).
ennouma_123
Messages postés
5
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020
18 mars 2020 à 13:53
18 mars 2020 à 13:53
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
18 mars 2020 à 16:10
18 mars 2020 à 16:10
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
ennouma_123
Messages postés
5
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020
18 mars 2020 à 21:25
18 mars 2020 à 21:25
merci, est ce que vous pouvez m'expliquer d'avantage
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
>
ennouma_123
Messages postés
5
Date d'inscription
mercredi 18 mars 2020
Statut
Membre
Dernière intervention
23 mars 2020
19 mars 2020 à 07:33
19 mars 2020 à 07:33
Gogole est ton ami… ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33435
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
18 décembre 2024
7 810
23 mars 2020 à 18:34
23 mars 2020 à 18:34
Est-ce que le langage est imposé ? Car faire ça en bash c'est quand même un peu la torture, il serait bien plus simple de faire ça par exemple en python...