[script shell] commande if (?) et fin de fichier

Bonjour,

Je m’amuse un peu encore avec bash avant de passer à du “vrai” code…
Là en l’occurence, je pensais faire une dernière mouture de mon script si utile “xkcd”.

or, j’ai deux erreurs étranges :
./xkcdt: line 9: [ 0 : commande introuvable
./xkcdt: line 88: Erreur de syntaxe : fin de fichier prématurée

la ligne 88 n’existe pas, le fichier se termine à la ligne 87. quant à l’erreur de commande introuvable, voici le if :

if [ $# -gt 0 ]
then

fi

?? Je ne comprends pas pourquoi est-ce qu’il y a des erreurs.
Avez-vous besoin du code complet ?

plop
on dirait que le est le meme problème que j’ai depuis la testing.

regarde si dans ton script t’a

si oui essaye de mettre:

j’ai #!/bin/bash…

[quote=“panthere”]plop
on dirait que le est le meme problème que j’ai depuis la testing.

regarde si dans ton script t’a

si oui essaye de mettre:

#!/bin/bash[/quote]Bonjour,
c’est pas une solution ce que tu proposes, en tout cas ça résout pas la cause du problème,
Tout mes scripts ont /bin/sh au lieu de /bin/bash en entête, je suis sous Sid
et je n’ai aucun des problèmes que vous décrivez,
la solution me semble donc être ailleurs …
En tout cas si ce que tu proposes fonctionne, ça voudrait juste dire que ses scripts contiennent des bashismes,
et c’est plutôt ça qu’il faudrait corriger.

Oui

si vous avez une solution pour que
var=$(($i-$j))

marche avec sh, pas de problème :slightly_smiling:. Tout le reste devrait passer.

Edit : le code :

le script récupère une image, son titre et le texte alt, aléatoirement dans la série du webcomic xkcd.
Au départ, pour l’intégrer dans un afficheur de webcomic sur mon bureau, mais celui-ci était moyen au niveau du format, et n’incluait pas de titre : pas mal de blagues passent à la trappe. Bref, j’expérimente avec ce script (c’est le premier que j’écris).

J’en étais au TODO : mettre à jour automatiquement.
Pour celà, je télécharge la page d’accueil (index.html), je fais un grep sur l’accesskey=“p”, qui désigne le précédent, j’en retire les trucs inintéressants, et je réécris le fichier du script avec les nouveautés.
Considérant qu’il est lancé se trouvant dans le répertoire utilisateur, ou que seul le root peut faire l’update si il est dans /usr/bin/. Il faudrait quand même que j’avertisse.
bref, c’est assez simple, mais désolé de ne pas commenter.

[code]#!/bin/bash

script xkcd

TODO : update Automatique du nombre de page ($RANDOM%705+1)

input="/tmp/xkcd.htm"
only=0
nb=705
update=0
remove=1
if test $# -gt 0;
then
while getopts outan opt
do
case $opt in
o)
input=$OPTARG
remove=0
;;
u)
only=1
;;
t)
only=2
;;
a)
only=3
;;
n)
update=1
;;
esac
done
fi

if [ $update -eq “1” ];
then
echo “Updating page count"
wget -O /tmp/up.htm -q http://xkcd.com/
nnb=$(grep “accesskey=“p”>” /tmp/up.htm -m 1 | sed 's/^.* href=”/(.)/" accesskey=.$/\1/'g | bc)
if [ $nnb -ne $nb ]
then
echo "New stuff online, upgrading…"
cat $0 | sed “s/nb=${nb}/nb=${nnb}/g” > $0
diff=$(($nnb-$nb))
echo "Welcome to “$diff” new post !"
else
echo "No new material here, sorry."
fi
rm /tmp/up.htm
exit 0
fi

RAND=$(($RANDOM%$nb))
RAND=$(($RAND+1))

wget -O $input -q http://xkcd.com/${RAND}/

xkcd_count=$(grep "Image URL (for hotlinking/embedding): " $input | wc -m)
xkcd_count=$(($xkcd_count-6))

xkcd=$(grep "Image URL (for hotlinking/embedding): " $input | cut -c 43-$xkcd_count)

xkcd=$(grep $xkcd $input | grep -v “

”)
src="$(echo $xkcd | sed 's/^.* src="(.)" title=.$/\1/'g)“
title=”$(echo $xkcd | sed 's/^.* title="(.)" alt=.$/\1/'g)“
alt=”$(echo $xkcd | sed 's/^.* alt="(.)" .$/\1/'g)"
if [ $remove -ne 0 ]; then rm $input; fi

case $only in
0)
echo "Strip : “$title
echo $alt” : "$src
exit 0
;;
1)
echo $src
exit 0
;;
2)
echo $title
exit 0
;;
3)
echo $alt
exit 0
;;
esac
exit 1[/code]

Avec ton script, je n’ai que cette erreur : line 14: Erreur de syntaxe près du symbole inattendu « ) » line 14: ` o)' Tu as résolu les autres ?

non, j’ai toujours les même erreurs. Et je n’ai pas celle-ci.
D’ailleurs, je ne vois pas d’erreur de syntaxe à ce niveau (j’utilise un autre while getopts … case o) ;; dans un script différent, qui semble fonctionner). Mais je ne la connais pas par coeur, est-ce que selon-vous c’est bon ?

Bonjour,

To if ici n’est pas correcte :

Si tu le veux sur une seul ligne la syntaxe est la suivante :

Merci. Désormais ça fonctionne !

Enfin, voici la sortie :
./xkcdt: line 10: test 0 : commande introuvable
Strip : The only downside is that it would be a little uncomfortable
Escher Bracelet : imgs.xkcd.com/comics/escher_wristband.jpg

donc, le test pour obtenir les arguments n’est toujours pas valide.
(j’ai tenté de modifier la ligne en utilisant
if test $# -gt 0;
then)

Peux tu donner ta derniere version du script car le test du nombre de parametre fonctionne pour moi.

[quote=“Lancazar”]non, j’ai toujours les même erreurs. Et je n’ai pas celle-ci.[/quote]En fait l’erreur vient de problème de copier coller,
même si le résultat semble visuellement bon, il y a des petites chouilles invisibles qui foutent la merde.

voilà, j’ai mis à jour le script dans le post correspondant.

j’ai encore une petite erreur :./xkcd: line 66: [: -ne : opérateur unaire attendu
mais bon, maintenant quand je lance le script, j’ai un titre et une url différent à chaque fois, ce qui est plutôt bon signe.

Je n’ai pas cette erreur chez moi, tu es sûr de l’avoir copié correctement ?
De plus, remove est bien déclaré au départ, justement à cette fin…

Non, comme écrit plus haut le copié collé me semble douteux,
et je le tiens pour responsable des erreurs que je poste.

Bonjour,

tous ces problemes seront résolus si vous faites

     dos2unix "nom du script"

quand vous editez un fichier sous windows il faut faire la conversion dos2unix pour que le script sera fonctionnel.

tenez moi au courant.

Cordialement,
Yassine.

Hummm, tu t’es perdu yassine92?
Je ne vois pas tellement ce que le mot “windows” (au sens Cro$oft), vient faire ici!

non non, ca arrive que des personnes editent leurs scripts sous “windows”, tu sais le systeme d’exploitation tt pourri :slightly_smiling: que tu connais pas
une fois sous unix/linux le script ne marche plus et sort des messages un peu bizarres, c’est pour ca qu’il faut faire la conversion, et c’est pour ca que la commande dos2unix existe aussi :wink:

[quote=“yassine92”]Bonjour,

tous ces problemes seront résolus si vous faites

     dos2unix "nom du script"

quand vous editez un fichier sous windows il faut faire la conversion dos2unix pour que le script sera fonctionnel.

tenez moi au courant.

Cordialement,
Yassine.[/quote]

Bonjour,
Je n’ai plus bash ni wget donc je ne peux pas retester le script mais il ne s’agissait pas d’un problème de fin de ligne dos/unix.
Je n’ai pas windows et il me paraît hautement improbable que Lancazar édite ses scripts là-dessus.
En plus les zouilles dont je parle peuvent aussi se retrouver à la place de n’importe quel espace sur une ligne.
Selon l’éditeur elles apparaîssent :if test\xc2\xa0$# -gt 0; ou pas if test $# -gt 0;