Problème case esac
Résolu
Bonjour,
J'ai un problème avec ce code :
Lorsque je le copie dans mon terminal, voici ce qu'il affiche :
Je n'arrive pas à trouver le problème. Pourquoi n'accepte-t-il pas ma fonction ?
D'avance merci.
J'ai un problème avec ce code :
add() { if [ "$#" = "5" ] ; then case "$1" in [1-6]) site="$1";; *) if [ "$(grep -c $1 fichier.txt)" = "1" ] ; then site="$(grep -n $1 fichier.txt)" fi esac fi }
Lorsque je le copie dans mon terminal, voici ce qu'il affiche :
iMac-de-Antoine:~ Antoine$ add() {
> if [ "$#" = "5" ] ; then
> case "$1" in
>
.CFUserTextEncoding .Trash/ .bash_history .config/ .matlab/ .subversion/ Desktop/ Downloads/ Library/ Music/ Public/ campagne.txt
.DS_Store .Xauthority .cache/ .dropbox/ .rnd .wine/ Documents/ Dropbox/ Movies/ Pictures/ VirtualBox VMs/ fichier.txt
> [1-6]) site="$1";;
>
.CFUserTextEncoding .Trash/ .bash_history .config/ .matlab/ .subversion/ Desktop/ Downloads/ Library/ Music/ Public/ campagne.txt
.DS_Store .Xauthority .cache/ .dropbox/ .rnd .wine/ Documents/ Dropbox/ Movies/ Pictures/ VirtualBox VMs/ fichier.txt
> *) if [ "$(grep -c $1 fichier.txt)" = "1" ] ; then
>
.CFUserTextEncoding .Trash/ .bash_history .config/ .matlab/ .subversion/ Desktop/ Downloads/ Library/ Music/ Public/ campagne.txt
.DS_Store .Xauthority .cache/ .dropbox/ .rnd .wine/ Documents/ Dropbox/ Movies/ Pictures/ VirtualBox VMs/ fichier.txt
>
.CFUserTextEncoding .Trash/ .bash_history .config/ .matlab/ .subversion/ Desktop/ Downloads/ Library/ Music/ Public/ campagne.txt
.DS_Store .Xauthority .cache/ .dropbox/ .rnd .wine/ Documents/ Dropbox/ Movies/ Pictures/ VirtualBox VMs/ fichier.txt
> site="$(grep -n $1 fichier.txt)"
>
.CFUserTextEncoding .Trash/ .bash_history .config/ .matlab/ .subversion/ Desktop/ Downloads/ Library/ Music/ Public/ campagne.txt
.DS_Store .Xauthority .cache/ .dropbox/ .rnd .wine/ Documents/ Dropbox/ Movies/ Pictures/ VirtualBox VMs/ fichier.txt
> fi
> esac
> fi
> }
Je n'arrive pas à trouver le problème. Pourquoi n'accepte-t-il pas ma fonction ?
D'avance merci.
A voir également:
- Problème case esac
- Aller à la ligne dans une case excel - Guide
- Excel case choix multiple - Guide
- Case à cocher excel - Forum MacOS
- Supprimer case à cocher excel - Forum Excel
- Raccourci clavier case à cocher - Forum Clavier
6 réponses
Bon j'ai l'impression que ça fait ce que tu veux alors :
Script toto.sh
Ici je fais deux appels à la fonction. Le premier appel passe dans le 2e cas, le second appel passe dans le 1er cas.
fichier.txt :
Pour tester, j'ai utiliser le fichier suivant :
Exécution
On oublie pas de mettre les droits en lecture et en exécution sur toto.sh, sinon il faut l'exécuter avec la commande
Résultat
Le résultat est conforme a ce que je t'ai annoncé dans mon précédent message.
Bonne chance
Script toto.sh
#!/bin/bash add() { if [ "$#" = "5" ] ; then case "$1" in [1-6]) site="$1" ;; *) if [ "$(grep -c $1 fichier.txt)" -eq 1 ] ; then site="$(grep -n $1 fichier.txt)" fi ;; esac fi } # Premier appel add comment b c d e echo "site = $site" # Deuxieme appel add 1 b c d e echo "site = $site" exit 0
Ici je fais deux appels à la fonction. Le premier appel passe dans le 2e cas, le second appel passe dans le 1er cas.
fichier.txt :
Pour tester, j'ai utiliser le fichier suivant :
www.google.fr
www.commentcamarche.net
www.yahoo.fr
Exécution
On oublie pas de mettre les droits en lecture et en exécution sur toto.sh, sinon il faut l'exécuter avec la commande
bash toto.sh(et il faut alors seulement les droits en lecture).
chmod a+rx toto.sh
./toto.sh
Résultat
Le résultat est conforme a ce que je t'ai annoncé dans mon précédent message.
site = 2:www.commentcamarche.net
site = 1
Bonne chance
Ce n'est pas tout simplement qu'il manque les
https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html
Par ailleurs pour les tests sur des valeurs numériques j'aurais plutôt utilisé
https://stackoverflow.com/questions/13086109/check-if-bash-variable-equals-0
Bonne chance
;;qui font office de break à la fin de chaque cas ?
https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html
Par ailleurs pour les tests sur des valeurs numériques j'aurais plutôt utilisé
-eq.
https://stackoverflow.com/questions/13086109/check-if-bash-variable-equals-0
Bonne chance
J'avais déjà essayé comme ceci, mais même avec ces modifications, le problème subsiste... J'obtiens exactement la même réponse.
Quel est le but de la fonction ?
Car là ce que tu as écrit c'est :
- si ma fonction reçoit 5 arguments
- si le premier argument vaut un entier entre 1 et 6, alors site prend la valeur du premier argument
- sinon on cherche si le premier argument est dans fichier.txt, et si on le trouve exactement une fois, alors on reporte le numéro de ligne et la ligne correspondante.
Vu d'ici ça paraît bizarre :-)
Car là ce que tu as écrit c'est :
- si ma fonction reçoit 5 arguments
- si le premier argument vaut un entier entre 1 et 6, alors site prend la valeur du premier argument
- sinon on cherche si le premier argument est dans fichier.txt, et si on le trouve exactement une fois, alors on reporte le numéro de ligne et la ligne correspondante.
Vu d'ici ça paraît bizarre :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui, c'est exactement le but recherché. La fonction n'est pas terminée, ce n'est qu'un début. Il s'agit pour l'instant de renvoyer le numéro d'une ligne d'un fichier soit en inscrivant directement en premier argument le numéro de la ligne, soit en identifiant la ligne par un mot ou une expression contenue dans cette ligne. Les quatre arguments suivant serviront à autre chose. Mais j'aurais aimé tester cette partie de la fonction pour le moment.
Merci beaucoup pour ta réponse ! Mais je viens tout juste de régler mon problème, sans pour autant le comprendre... En fait, lorsque je colle mon code dans la console, il faut que je supprime toutes les tabulations. Résultat : mon code n'est plus indenté, mais il fonctionne. :)
En tout cas, merci pour ton aide.
En tout cas, merci pour ton aide.