et l'exécution du script affiche:
[: 491: missing ]
/usr/local/bin/GeneThumb: 491: [[: not found
/usr/local/bin/GeneThumb: 491: x2006:09:02: not found
Date : 2006:09:02 19:51:44.
(la ligne 491 contenant juste "done", soit la fin de la boucle sur mon
fichier de photos et identify etant une commande du package imagemagick
qui permet de lire les données EXIF de la photo)
Bref, comment comparer une variable dans un script bash ?
En supplément, et comme cadeau de Noël, j'aimerais bien un cours sur la
différence entre les trois tests suivants:
* if [[ ]]
* if (( ))
* if [ ]
Ma page de man de bash est en anglais et je sens que des subtilités
m'échappent...
Merci
--
L'intelligence artificielle ne remplacera jamais la connerie humaine.
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
echo " Donnée EXIF sur la date indisponible" Date="Date non enregistrée"
else
echo " Date : $Date"
fi
et l'exécution du script affiche: [: 491: missing ] /usr/local/bin/GeneThumb: 491: [[: not found /usr/local/bin/GeneThumb: 491: x2006:09:02: not found Date : 2006:09:02 19:51:44.
(la ligne 491 contenant juste "done", soit la fin de la boucle sur mon fichier de photos et identify etant une commande du package imagemagick qui permet de lire les données EXIF de la photo)
Bref, comment comparer une variable dans un script bash ?
En supplément, et comme cadeau de Noël, j'aimerais bien un cours sur la différence entre les trois tests suivants: * if [[ ]] * if (( )) * if [ ]
Ma page de man de bash est en anglais et je sens que des subtilités m'échappent...
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
echo " Donnée EXIF sur la date indisponible"
Date="Date non enregistrée"
else
echo " Date : $Date"
fi
et l'exécution du script affiche:
[: 491: missing ]
/usr/local/bin/GeneThumb: 491: [[: not found
/usr/local/bin/GeneThumb: 491: x2006:09:02: not found
Date : 2006:09:02 19:51:44.
(la ligne 491 contenant juste "done", soit la fin de la boucle sur mon
fichier de photos et identify etant une commande du package imagemagick
qui permet de lire les données EXIF de la photo)
Bref, comment comparer une variable dans un script bash ?
En supplément, et comme cadeau de Noël, j'aimerais bien un cours sur la
différence entre les trois tests suivants:
* if [[ ]]
* if (( ))
* if [ ]
Ma page de man de bash est en anglais et je sens que des subtilités
m'échappent...
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
echo " Donnée EXIF sur la date indisponible" Date="Date non enregistrée"
else
echo " Date : $Date"
fi
et l'exécution du script affiche: [: 491: missing ] /usr/local/bin/GeneThumb: 491: [[: not found /usr/local/bin/GeneThumb: 491: x2006:09:02: not found Date : 2006:09:02 19:51:44.
(la ligne 491 contenant juste "done", soit la fin de la boucle sur mon fichier de photos et identify etant une commande du package imagemagick qui permet de lire les données EXIF de la photo)
Bref, comment comparer une variable dans un script bash ?
En supplément, et comme cadeau de Noël, j'aimerais bien un cours sur la différence entre les trois tests suivants: * if [[ ]] * if (( )) * if [ ]
Ma page de man de bash est en anglais et je sens que des subtilités m'échappent...
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
echo " Donnée EXIF sur la date indisponible" Date="Date non enregistrée"
else
echo " Date : $Date"
fi
Pour une raison inexpliquée, j'ai été obligé de supprimer le doublage des crochets dans le test. if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
continuait à me provoquer l'erreur /usr/local/bin/GeneThumb: 491: [[: not found
Donc j'ai mis if [ "$Date" = '' -o "$Date" = 'unknown' ] ; then
A remarquer que cette erreur n'interrompait pas la boucle, sauf quand les données EXIF n'existent pas et que je fais un calcul pour reformater le diaph, alors le script crashe.
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
echo " Donnée EXIF sur la date indisponible"
Date="Date non enregistrée"
else
echo " Date : $Date"
fi
Pour une raison inexpliquée, j'ai été obligé de supprimer le doublage
des crochets dans le test.
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
continuait à me provoquer l'erreur
/usr/local/bin/GeneThumb: 491: [[: not found
Donc j'ai mis
if [ "$Date" = '' -o "$Date" = 'unknown' ] ; then
A remarquer que cette erreur n'interrompait pas la boucle, sauf quand
les données EXIF n'existent pas et que je fais un calcul pour reformater
le diaph, alors le script crashe.
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
echo " Donnée EXIF sur la date indisponible" Date="Date non enregistrée"
else
echo " Date : $Date"
fi
Pour une raison inexpliquée, j'ai été obligé de supprimer le doublage des crochets dans le test. if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
continuait à me provoquer l'erreur /usr/local/bin/GeneThumb: 491: [[: not found
Donc j'ai mis if [ "$Date" = '' -o "$Date" = 'unknown' ] ; then
A remarquer que cette erreur n'interrompait pas la boucle, sauf quand les données EXIF n'existent pas et que je fais un calcul pour reformater le diaph, alors le script crashe.
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
Il y a -z pour tester si une chaîne est de longueur 0. (voir man test)
tout-à-fait, mais c'est moins "parlant" pour qq'un qui précise dans son post qu'il n'est vraiment pas à l'aise avec le scripting shell.
mais c'est effectivement plus élégant.
on peut écrire aussi l'expression en C-style :
if [ ! "$Date" ] || [ "$Date" = 'unknown' ] ; then
mais c'est bof bof je trouve ;)
Hugolino
Le Tue, 26 Dec 2006 10:47:30 +0100, Raphaël SEBAN a écrit:
Raphaël SEBAN wrote:
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
Il y a -z pour tester si une chaîne est de longueur 0. (voir man test)
Je connaissais, mais je ne savais pas mixer ce test avec un autre.
tout-à-fait, mais c'est moins "parlant" pour qq'un qui précise dans son post qu'il n'est vraiment pas à l'aise avec le scripting shell.
mais c'est effectivement plus élégant.
on peut écrire aussi l'expression en C-style :
if [ ! "$Date" ] || [ "$Date" = 'unknown' ] ; then
En fait ce préfère ce style-là...
mais c'est bof bof je trouve ;)
... pourquoi ?
-- DS: En mode root, je n'arrive plus à lancer un programme quand je suis en communication internet. DV: Il reste de la place sur tes disques ? -+- in GCP: "Heuristique, herméneutique et maïeutique" -+-
Le Tue, 26 Dec 2006 10:47:30 +0100, Raphaël SEBAN a écrit:
Raphaël SEBAN wrote:
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
Il y a -z pour tester si une chaîne est de longueur 0. (voir man test)
Je connaissais, mais je ne savais pas mixer ce test avec un autre.
tout-à-fait, mais c'est moins "parlant" pour qq'un qui précise dans son
post qu'il n'est vraiment pas à l'aise avec le scripting shell.
mais c'est effectivement plus élégant.
on peut écrire aussi l'expression en C-style :
if [ ! "$Date" ] || [ "$Date" = 'unknown' ] ; then
En fait ce préfère ce style-là...
mais c'est bof bof je trouve ;)
... pourquoi ?
--
DS: En mode root, je n'arrive plus à lancer un programme quand je suis
en communication internet.
DV: Il reste de la place sur tes disques ?
-+- in GCP: "Heuristique, herméneutique et maïeutique" -+-
Le Tue, 26 Dec 2006 10:47:30 +0100, Raphaël SEBAN a écrit:
Raphaël SEBAN wrote:
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
Il y a -z pour tester si une chaîne est de longueur 0. (voir man test)
Je connaissais, mais je ne savais pas mixer ce test avec un autre.
tout-à-fait, mais c'est moins "parlant" pour qq'un qui précise dans son post qu'il n'est vraiment pas à l'aise avec le scripting shell.
mais c'est effectivement plus élégant.
on peut écrire aussi l'expression en C-style :
if [ ! "$Date" ] || [ "$Date" = 'unknown' ] ; then
En fait ce préfère ce style-là...
mais c'est bof bof je trouve ;)
... pourquoi ?
-- DS: En mode root, je n'arrive plus à lancer un programme quand je suis en communication internet. DV: Il reste de la place sur tes disques ? -+- in GCP: "Heuristique, herméneutique et maïeutique" -+-
Hugolino
Le Tue, 26 Dec 2006 10:20:37 +0100, Raphaël SEBAN a écrit:
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
Pour une raison inexpliquée, j'ai été obligé de supprimer le doublage des crochets dans le test. if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
continuait à me provoquer l'erreur /usr/local/bin/GeneThumb: 491: [[: not found
Donc j'ai mis if [ "$Date" = '' -o "$Date" = 'unknown' ] ; then
au temps pour moi (faute d'inattention) : c'est effectivement en crochets simples et non doubles.
Pas grave. Mais la page de man de bash parle effectivement de double crochets: http://pages.videotron.com/bash/doc/manbashfr.html «[[ expression ]] Renvoie 1 ou 0 selon la valeur de la condition expression.»
Donc je ne sais toujours pas quand il faut mettre des simples ou des doubles (sauf à procéder par essais-erreurs)
-- À peu près tout ce qu'on peut imaginer de débile en informatique finit par exister un jour ou l'autre. (Bill Gates) Hugo (né il y a 1 346 590 764 secondes)
Le Tue, 26 Dec 2006 10:20:37 +0100, Raphaël SEBAN a écrit:
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
Pour une raison inexpliquée, j'ai été obligé de supprimer le doublage
des crochets dans le test.
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
continuait à me provoquer l'erreur
/usr/local/bin/GeneThumb: 491: [[: not found
Donc j'ai mis
if [ "$Date" = '' -o "$Date" = 'unknown' ] ; then
au temps pour moi (faute d'inattention) : c'est effectivement en
crochets simples et non doubles.
Pas grave. Mais la page de man de bash parle effectivement de double
crochets:
http://pages.videotron.com/bash/doc/manbashfr.html
«[[ expression ]]
Renvoie 1 ou 0 selon la valeur de la condition expression.»
Donc je ne sais toujours pas quand il faut mettre des simples ou des
doubles (sauf à procéder par essais-erreurs)
--
À peu près tout ce qu'on peut imaginer de débile en informatique
finit par exister un jour ou l'autre. (Bill Gates)
Hugo (né il y a 1 346 590 764 secondes)
Le Tue, 26 Dec 2006 10:20:37 +0100, Raphaël SEBAN a écrit:
if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
Pour une raison inexpliquée, j'ai été obligé de supprimer le doublage des crochets dans le test. if [[ "$Date" = '' -o "$Date" = 'unknown' ]] ; then
continuait à me provoquer l'erreur /usr/local/bin/GeneThumb: 491: [[: not found
Donc j'ai mis if [ "$Date" = '' -o "$Date" = 'unknown' ] ; then
au temps pour moi (faute d'inattention) : c'est effectivement en crochets simples et non doubles.
Pas grave. Mais la page de man de bash parle effectivement de double crochets: http://pages.videotron.com/bash/doc/manbashfr.html «[[ expression ]] Renvoie 1 ou 0 selon la valeur de la condition expression.»
Donc je ne sais toujours pas quand il faut mettre des simples ou des doubles (sauf à procéder par essais-erreurs)
-- À peu près tout ce qu'on peut imaginer de débile en informatique finit par exister un jour ou l'autre. (Bill Gates) Hugo (né il y a 1 346 590 764 secondes)
talon
Hugolino wrote:
Pas grave. Mais la page de man de bash parle effectivement de double crochets: http://pages.videotron.com/bash/doc/manbashfr.html «[[ expression ]] Renvoie 1 ou 0 selon la valeur de la condition expression.»
Donc je ne sais toujours pas quand il faut mettre des simples ou des doubles (sauf à procéder par essais-erreurs)
Oui, mais si tu regardes la page man de sh sur un autre système, par exemple FreeBSD tu ne trouves pas mention du [[. Tu en déduis que [[ est encore une basherie à fuir comme la peste. Par contre le simple [ est un synonyme bien connu de "test", et en tant que tel utilisable partout et documenté dans "man test". Il me semble que se ramener toujours au plus simple et au plus général est la bonne voie.
--
Michel TALON
Hugolino <hugolino@free.fr> wrote:
Pas grave. Mais la page de man de bash parle effectivement de double
crochets:
http://pages.videotron.com/bash/doc/manbashfr.html
«[[ expression ]]
Renvoie 1 ou 0 selon la valeur de la condition expression.»
Donc je ne sais toujours pas quand il faut mettre des simples ou des
doubles (sauf à procéder par essais-erreurs)
Oui, mais si tu regardes la page man de sh sur un autre système, par
exemple FreeBSD tu ne trouves pas mention du [[. Tu en déduis que [[ est
encore une basherie à fuir comme la peste. Par contre le simple [ est un
synonyme bien connu de "test", et en tant que tel utilisable partout et
documenté dans "man test". Il me semble que se ramener toujours au plus
simple et au plus général est la bonne voie.
Pas grave. Mais la page de man de bash parle effectivement de double crochets: http://pages.videotron.com/bash/doc/manbashfr.html «[[ expression ]] Renvoie 1 ou 0 selon la valeur de la condition expression.»
Donc je ne sais toujours pas quand il faut mettre des simples ou des doubles (sauf à procéder par essais-erreurs)
Oui, mais si tu regardes la page man de sh sur un autre système, par exemple FreeBSD tu ne trouves pas mention du [[. Tu en déduis que [[ est encore une basherie à fuir comme la peste. Par contre le simple [ est un synonyme bien connu de "test", et en tant que tel utilisable partout et documenté dans "man test". Il me semble que se ramener toujours au plus simple et au plus général est la bonne voie.
--
Michel TALON
Raphaël SEBAN
if [ ! "$Date" ] || [ "$Date" = 'unknown' ] ; then
En fait ce préfère ce style-là...
mais c'est bof bof je trouve ;)
... pourquoi ?
AMHA ça n'est pas très "élégant" au sens mathématique du terme.
Autrement dit, ça oblige à écrire bcp de code alors qu'on pourrait en écrire nettement moins pour dire exactement la même chose.
Mais bon. C'est un avis personnel.
if [ ! "$Date" ] || [ "$Date" = 'unknown' ] ; then
En fait ce préfère ce style-là...
mais c'est bof bof je trouve ;)
... pourquoi ?
AMHA ça n'est pas très "élégant" au sens
mathématique du terme.
Autrement dit, ça oblige à écrire bcp de
code alors qu'on pourrait en écrire
nettement moins pour dire exactement la
même chose.