L'execution du script bash que je suis en train de faire doit etre de la
forme:
./script fichier.truc
et je voudrais vérifier que l'argument est de la forme :
nom de fichier, un point et une extension.
Si vous avez des suggestions...
merci.
PS: n'envoyez pas d'e-mail, mon adresse est invalide, merci.
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
Si vous avez des suggestions... merci.
PS: n'envoyez pas d'e-mail, mon adresse est invalide, merci.
J'apprends aussi le bash, et je pense que ceci est un bon début avec les expressions régulières, le nom de fichier contient des chiffres, des lettres ou des underscores...
#!/bin/bash
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi
oliv
Mali wrote:
Bonjour
L'execution du script bash que je suis en train de faire doit etre de la
forme:
./script fichier.truc
et je voudrais vérifier que l'argument est de la forme :
nom de fichier, un point et une extension.
Si vous avez des suggestions...
merci.
PS: n'envoyez pas d'e-mail, mon adresse est invalide, merci.
J'apprends aussi le bash, et je pense que ceci est un bon début avec les
expressions régulières, le nom de fichier contient des chiffres, des
lettres ou des underscores...
#!/bin/bash
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null
if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
Si vous avez des suggestions... merci.
PS: n'envoyez pas d'e-mail, mon adresse est invalide, merci.
J'apprends aussi le bash, et je pense que ceci est un bon début avec les expressions régulières, le nom de fichier contient des chiffres, des lettres ou des underscores...
#!/bin/bash
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi
oliv
Stephane Chazelas
2004-07-19, 15:29(+02), olivier girant: [...]
et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension. [...]
#!/bin/bash
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi
(ton egrep verifie juste que son input contient au moins une ligne d'au moins 3 carateres (deux etant alphanumeriques).
#! /usr/local/bin/bash - case ${1##*/} in ?*.*?) echo OK;; *) echo pas OK;; esac
S'il y a des restrictions sur les caracteres du nom ou de l'extension:
#! /usr/local/bin/bash - shopt -s extglob case ${1##*/} in +([[:alnum:]_]).+([[:alnum:]_])) echo OK;; *) echo pas OK;; esac
(pas testé)
-- Stephane
Pascal Bourguignon
Mali writes:
Bonjour
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
Si vous avez des suggestions... merci.
PS: n'envoyez pas d'e-mail, mon adresse est invalide, merci.
C'est mal spécifié tout ça !
Est ce que le nom peut être vide ? Est ce que l'extension peut être vide ? Est ce qu'ils peuvent être vide en même temps ? Est ce qu'il peut contenir plusieurs points ?
Une solution pourrait être de ne vérifier que l'argument contient au moins un point:
if [ -n "${arg//[^.]}" ] ; then echo bon ; else echo pas bon ; fi
Sinon, ça pourrait être le moment d'étudier les grammaires et les expressions régulières...
There is no worse tyranny than to force a man to pay for what he does not want merely because you think it would be good for him. -- Robert Heinlein
Mali <mali@noemailplease.com> writes:
Bonjour
L'execution du script bash que je suis en train de faire doit etre de
la forme:
./script fichier.truc
et je voudrais vérifier que l'argument est de la forme :
nom de fichier, un point et une extension.
Si vous avez des suggestions...
merci.
PS: n'envoyez pas d'e-mail, mon adresse est invalide, merci.
C'est mal spécifié tout ça !
Est ce que le nom peut être vide ?
Est ce que l'extension peut être vide ?
Est ce qu'ils peuvent être vide en même temps ?
Est ce qu'il peut contenir plusieurs points ?
Une solution pourrait être de ne vérifier que l'argument contient au
moins un point:
if [ -n "${arg//[^.]}" ] ; then echo bon ; else echo pas bon ; fi
Sinon, ça pourrait être le moment d'étudier les grammaires et les
expressions régulières...
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
Si vous avez des suggestions... merci.
PS: n'envoyez pas d'e-mail, mon adresse est invalide, merci.
C'est mal spécifié tout ça !
Est ce que le nom peut être vide ? Est ce que l'extension peut être vide ? Est ce qu'ils peuvent être vide en même temps ? Est ce qu'il peut contenir plusieurs points ?
Une solution pourrait être de ne vérifier que l'argument contient au moins un point:
if [ -n "${arg//[^.]}" ] ; then echo bon ; else echo pas bon ; fi
Sinon, ça pourrait être le moment d'étudier les grammaires et les expressions régulières...
There is no worse tyranny than to force a man to pay for what he does not want merely because you think it would be good for him. -- Robert Heinlein
Laurent Wacrenier
Mali écrit:
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
une chaîne, un point, une autre chaîne ?
case "$1" in ?*.?*) echo OK ;; *) echo KO ;; esac
Mali <mali@noemailplease.com> écrit:
L'execution du script bash que je suis en train de faire doit etre de la
forme:
./script fichier.truc
et je voudrais vérifier que l'argument est de la forme :
nom de fichier, un point et une extension.
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
une chaîne, un point, une autre chaîne ?
case "$1" in ?*.?*) echo OK ;; *) echo KO ;; esac
olivier girant
Stephane Chazelas wrote:
2004-07-19, 15:29(+02), olivier girant: [...]
et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
[...]
#!/bin/bash
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal, c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est valable...
oliv
Stephane Chazelas wrote:
2004-07-19, 15:29(+02), olivier girant:
[...]
et je voudrais vérifier que l'argument est de la forme :
nom de fichier, un point et une extension.
[...]
#!/bin/bash
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null
if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal,
c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est
valable...
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal, c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est valable...
oliv
Stephane Chazelas
2004-07-19, 16:17(+02), olivier girant: [...]
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi [...]
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal, c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est valable... [...]
En l'occurrence, il faut savoir que c'est un *mauvais* debut.
Ce sont des exemples de ce qu'il ne faut pas faire:
1- "echo" ne devrait pas etre utilisé pour afficher une chaine arbitraire (printf a la place).
2- toute reference a une variable devrait etre mise entre double quotes (sauf quand on est interessé par l'un des trois comportements de bash quand la chaine est laissee a nu).
3- egrep est l'equivalent non-standard (quoique pas forcement moins portable) de grep -E
4- grep fait du matching de lignes, pas de chaines de caracteres. En d'autres termes, ca ne fonctionne plus si la chaine peut contenir des sauts de lignes. Voir expr pour du matching de chaines.
5- pour matcher l'integralité de la ligne, la regexp doit etre ancree (ou l'option -x de grep doit etre utilisee).
6- le (($?)) outre le fait qu'il est moins lisible que (($? == 0)) est inutile.
-- Stephane
2004-07-19, 16:17(+02), olivier girant:
[...]
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null
if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi
[...]
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal,
c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est
valable...
[...]
En l'occurrence, il faut savoir que c'est un *mauvais* debut.
Ce sont des exemples de ce qu'il ne faut pas faire:
1- "echo" ne devrait pas etre utilisé pour afficher une chaine
arbitraire (printf a la place).
2- toute reference a une variable devrait etre mise entre double
quotes (sauf quand on est interessé par l'un des trois
comportements de bash quand la chaine est laissee a nu).
3- egrep est l'equivalent non-standard (quoique pas forcement
moins portable) de grep -E
4- grep fait du matching de lignes, pas de chaines de
caracteres. En d'autres termes, ca ne fonctionne plus si la
chaine peut contenir des sauts de lignes. Voir expr pour du
matching de chaines.
5- pour matcher l'integralité de la ligne, la regexp doit etre
ancree (ou l'option -x de grep doit etre utilisee).
6- le (($?)) outre le fait qu'il est moins lisible que
(($? == 0)) est inutile.
echo $1 | egrep "([[:alnum:]_])+.([[:alnum:]_])+" &>/dev/null if (($?)); then echo Argument $1 incorrect; else echo Argument $1 ok; fi [...]
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal, c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est valable... [...]
En l'occurrence, il faut savoir que c'est un *mauvais* debut.
Ce sont des exemples de ce qu'il ne faut pas faire:
1- "echo" ne devrait pas etre utilisé pour afficher une chaine arbitraire (printf a la place).
2- toute reference a une variable devrait etre mise entre double quotes (sauf quand on est interessé par l'un des trois comportements de bash quand la chaine est laissee a nu).
3- egrep est l'equivalent non-standard (quoique pas forcement moins portable) de grep -E
4- grep fait du matching de lignes, pas de chaines de caracteres. En d'autres termes, ca ne fonctionne plus si la chaine peut contenir des sauts de lignes. Voir expr pour du matching de chaines.
5- pour matcher l'integralité de la ligne, la regexp doit etre ancree (ou l'option -x de grep doit etre utilisee).
6- le (($?)) outre le fait qu'il est moins lisible que (($? == 0)) est inutile.
-- Stephane
Olivier
Stephane Chazelas wrote:
2004-07-19, 16:17(+02), olivier girant:
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal, c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est valable...
[...]
En l'occurrence, il faut savoir que c'est un *mauvais* debut.
Ce sont des exemples de ce qu'il ne faut pas faire:
1- "echo" ne devrait pas etre utilisé pour afficher une chaine arbitraire (printf a la place).
2- toute reference a une variable devrait etre mise entre double quotes (sauf quand on est interessé par l'un des trois comportements de bash quand la chaine est laissee a nu).
3- egrep est l'equivalent non-standard (quoique pas forcement moins portable) de grep -E
4- grep fait du matching de lignes, pas de chaines de caracteres. En d'autres termes, ca ne fonctionne plus si la chaine peut contenir des sauts de lignes. Voir expr pour du matching de chaines.
5- pour matcher l'integralité de la ligne, la regexp doit etre ancree (ou l'option -x de grep doit etre utilisee).
6- le (($?)) outre le fait qu'il est moins lisible que (($? == 0)) est inutile.
Je vais me faire tout petit et laisser les cadors faire... Je voulais juste proposer un peu d'aide...
oliv
Stephane Chazelas wrote:
2004-07-19, 16:17(+02), olivier girant:
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal,
c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est
valable...
[...]
En l'occurrence, il faut savoir que c'est un *mauvais* debut.
Ce sont des exemples de ce qu'il ne faut pas faire:
1- "echo" ne devrait pas etre utilisé pour afficher une chaine
arbitraire (printf a la place).
2- toute reference a une variable devrait etre mise entre double
quotes (sauf quand on est interessé par l'un des trois
comportements de bash quand la chaine est laissee a nu).
3- egrep est l'equivalent non-standard (quoique pas forcement
moins portable) de grep -E
4- grep fait du matching de lignes, pas de chaines de
caracteres. En d'autres termes, ca ne fonctionne plus si la
chaine peut contenir des sauts de lignes. Voir expr pour du
matching de chaines.
5- pour matcher l'integralité de la ligne, la regexp doit etre
ancree (ou l'option -x de grep doit etre utilisee).
6- le (($?)) outre le fait qu'il est moins lisible que
(($? == 0)) est inutile.
Je vais me faire tout petit et laisser les cadors faire...
Je voulais juste proposer un peu d'aide...
J'ai dit que c'était un *début*, et puis comme l'a fait remarqué Pascal, c'est très mal spécifié, donc on peut pas vraiment juger de ce qui est valable...
[...]
En l'occurrence, il faut savoir que c'est un *mauvais* debut.
Ce sont des exemples de ce qu'il ne faut pas faire:
1- "echo" ne devrait pas etre utilisé pour afficher une chaine arbitraire (printf a la place).
2- toute reference a une variable devrait etre mise entre double quotes (sauf quand on est interessé par l'un des trois comportements de bash quand la chaine est laissee a nu).
3- egrep est l'equivalent non-standard (quoique pas forcement moins portable) de grep -E
4- grep fait du matching de lignes, pas de chaines de caracteres. En d'autres termes, ca ne fonctionne plus si la chaine peut contenir des sauts de lignes. Voir expr pour du matching de chaines.
5- pour matcher l'integralité de la ligne, la regexp doit etre ancree (ou l'option -x de grep doit etre utilisee).
6- le (($?)) outre le fait qu'il est moins lisible que (($? == 0)) est inutile.
Je vais me faire tout petit et laisser les cadors faire... Je voulais juste proposer un peu d'aide...
oliv
TiChou
Dans le message <news:40fc3256$0$15275$, *Olivier* tapota sur f.c.o.unix :
Je vais me faire tout petit et laisser les cadors faire... Je voulais juste proposer un peu d'aide...
Toute contribution est intéressante, pour preuve, la votre nous a permis d'apprendre ou de nous rappeler quelques points importants sur la programmation shell grâce à l'intervention de Stéphane Chazelas.
-- TiChou
Dans le message <news:40fc3256$0$15275$636a15ce@news.free.fr>,
*Olivier* tapota sur f.c.o.unix :
Je vais me faire tout petit et laisser les cadors faire...
Je voulais juste proposer un peu d'aide...
Toute contribution est intéressante, pour preuve, la votre nous a permis
d'apprendre ou de nous rappeler quelques points importants sur la
programmation shell grâce à l'intervention de Stéphane Chazelas.
Dans le message <news:40fc3256$0$15275$, *Olivier* tapota sur f.c.o.unix :
Je vais me faire tout petit et laisser les cadors faire... Je voulais juste proposer un peu d'aide...
Toute contribution est intéressante, pour preuve, la votre nous a permis d'apprendre ou de nous rappeler quelques points importants sur la programmation shell grâce à l'intervention de Stéphane Chazelas.
-- TiChou
Unknown
et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
c'est quoi une extension ?
et je voudrais vérifier que l'argument est de la forme :
nom de fichier, un point et une extension.
et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
c'est quoi une extension ?
Mali
Mali wrote:
Bonjour
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
Si vous avez des suggestions... merci.
Merci à tous pour votre aide ! Toutes les suggestions ont été intéressantes. Encore MERCI !
Mali wrote:
Bonjour
L'execution du script bash que je suis en train de faire doit etre de la
forme:
./script fichier.truc
et je voudrais vérifier que l'argument est de la forme :
nom de fichier, un point et une extension.
Si vous avez des suggestions...
merci.
Merci à tous pour votre aide ! Toutes les suggestions ont été
intéressantes. Encore MERCI !
L'execution du script bash que je suis en train de faire doit etre de la forme: ./script fichier.truc et je voudrais vérifier que l'argument est de la forme : nom de fichier, un point et une extension.
Si vous avez des suggestions... merci.
Merci à tous pour votre aide ! Toutes les suggestions ont été intéressantes. Encore MERCI !