Aller au contenu

Messages recommandés

Bonjour,

J'essaie de faire un script sur mon DS-207+ mais je n'arrive pas en en faire fonctionner même le plus simple. En effet dès qu'il y a un 'case' ou un 'if' j'ai la même erreur : unexpected (expecting "...")

Par exemple :

 #!/bin/sh

  if [ "$1" = "oui" ]; then

  echo "moi aussi"

  else

  echo "non"

  fi
J'arrive au message d'erreur :
 9: Syntax error: end of file unexpected (expecting "then")

et pareil pour les 'case' sauf que c'est (expecting "in").

Merci pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Tu trouveras plusieurs 'type' d'écriture pour ton cas, mais ton probleme est un manque d'espace entre le ] et le ;

#!/bin/sh

if [ "$1" = "oui" ] ; then

echo "moi aussi"

else

echo "non"

fi
Sinon, pour ce genre de test, tu as également :
#!/bin/sh

if test "$1" = "oui"

then

echo "moi aussi"

else

echo "non"

fi
ou plus compacte
[ "$1" = "1" ] && echo "oui" || echo "non"

A+ :hi:

Fred.

Lien vers le commentaire
Partager sur d’autres sites

Merci pour cette réponse rapide et pour le lien, ça me permettra d'aller plus loin.

Mais le problème est toujours la, avec ce code :

#!/bin/sh

 if test "$1" = "oui"

 then

 echo "moi aussi"

 else

 echo "non"

 fi
Je ne pense pas que ce soit un problème du script en lui même car en récupérant les codes des script du syno (ceux du boot) j'ai toujours cette erreur. Par contre je peux lancer un script de démarrage ... Je m'explique :
 #je copie le script pour ne pas effacer quelque chose

  cp /usr/syno/etc.defaults/rc.d/S09DDNS.h /volume1/public/


  #je lance l'exécution 

  sh S09DDNS.sh

  #tout va bien
Mais si je copie le code dans un autre fichier ou que je modifie ce fichier (l'écriture d'un echo par exemple) j'obtiens toujours la même erreur : unexpected blablabla... note : avec les deux versions "if test" et "if []" j'ai toujours le problème mais avec la version courte :
[ "$1" = "oui" ] && echo "moi aussi" || echo "non"

ça fonctionne (et même sans le #!/bin/sh), mais si je doit tout faire en condensée!!

n'aurait-il pas une autre solution?

Lien vers le commentaire
Partager sur d’autres sites

Pour commencer j'ai mis en route le système des hôtes virtuel pour pouvoir héberger plusieurs sites. Pour y accéder il faut une adresse qui renvoit à l'adresse IP du syno. Mais il en faut une par site.

Comme j'ai voulue garder mon adresse en dynamic je me suis inscrit chez dyndns.org pour avoir une redirection. J'ai configuré la mise a jour du DNS avec DDNS l'outils du syno, or ce programme ne gère qu'une seul redirection. Il m'a donc fallue trouver autre chose pour gérer plusieurs redirections. J'ai trouvé ddclient

C'est à partir de la que j'ai besoin d'un script qui me lance ddclient proprement. J'ai donc voulue recopier ceux du syno, notament le S09DDNS.sh qui prend en compte si oui ou non le service DNS est activé sur le syno (pour faire d'une pierre deux coups). Mais la problème, avec soit le if soit le case prenant en compte la commande : start|stop|restart

Et je ne vois vraiment pas pourquoi.

Lien vers le commentaire
Partager sur d’autres sites

Ba j'ai juste répondu à la question. Le script doit lancer ddclient et doit comme les autres scripts du syno prendre en argument start stop ou restart. Mais mon problème reste que les structures à base de if ou case ne marche pas. Et je trouve ça d'autant plus embetant que je voulais faire d'autres scripts.

Alors si quelqu'un connait la solution!

Lien vers le commentaire
Partager sur d’autres sites

Ba j'ai juste répondu à la question. Le script doit lancer ddclient et doit comme les autres scripts du syno prendre en argument start stop ou restart. Mais mon problème reste que les structures à base de if ou case ne marche pas. Et je trouve ça d'autant plus embetant que je voulais faire d'autres scripts.

Alors si quelqu'un connait la solution!

Tes scripts, tu les créés bien au format unix ? (et surtout pas avec un éditeur comme notepad sous windows)

Pascal

Lien vers le commentaire
Partager sur d’autres sites

c'est à dire format unix?

Les caractères de fin de lignes ne sont pas les mêmes entre windows (ou dos) et unix / linux. Du coup un script construit sous windows est mal interprété sous unix ou linux.

En effet je travail avec wordpad, je vais essayer sous unix. j'espère que ce sera ça!

Le problème vient probablement de là alors.

Tu as plusieurs solutions, dont :

- utiliser l'éditeur vi en ssh ou telnet sur le syno (mais pas très convivial, bien que certains ne jurent que par lui ;) ),

- utiliser un éditeur windows qui te permet de sauvegarder au format unix (par exemple PSPad qui est gratuit),

- utiliser la commande perl suivante sur le syno pour convertir le fichier au format dos vers un format unix : perl -pi -e 's/\r\n/\n/g' script.sh

Pascal

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.