Page 1 sur 2
Script .SH ne fonctionne pas (NAS Synology)
Publié : 06 nov. 2015, 21:46
par Gaz
Bonsoir,
Je comprend pas pour ce la ne fonctionne pas, ni des ames généreuse on la solution...
voici mon script :
Code : Tout sélectionner
#!/bin/sh
result=$(curl -s http://192.168.X.XX:XXXX/json.htm?type=devices&rid=9l jq -r .result[].Havetimeout)
echo $result
if [ $result = "false" ]
then
sudo service domoticz.sz restart
#fi
Et voici la réponse lorsque je le lance :
Code : Tout sélectionner
EDF13.sh: line 6: syntax error: unexpected end of file (expecting "fi")
D'avance merci.
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 06 nov. 2015, 22:11
par vil1driver
Enlèves de # devant fi
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 06 nov. 2015, 22:19
par rimram31
C'est assez clair pourtant

(pour ceux qui y passe leurs journées ...) Il lui manque la fin du if, le fi (en sh) effectivement le # (en 1ere colonne ?) est un commentaire (sauf la toute première ligne du bin/sh mais ça c'est encore une autre histoire ...).
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 06 nov. 2015, 23:52
par Gaz
Meme sans le # ca bug !
Il doit me manquer une truc à installer sur le nas
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 07 nov. 2015, 09:36
par rimram31
rimram31 a écrit :... sauf la toute première ligne du bin/sh mais ça c'est encore une autre histoire ...
Désolé, j'aurai du être plus explicite dès mon premier post. Le premier #, plutôt le #! en 1ere ligne/1ere colonne est quelque chose de particulier.
Les commandes du fichier sont des commandes "shell", il en existe plusieurs (ssh, csh, bash ...) là c'est du sh. Tu pourrais exécuter ton script en tapant en ligne de commande "/usr/bin/sh le_nom_chemin_de_ton_fichier", fichier sans le #! en 1ere ligne, ça marche. La syntaxe #! en 1ere ligne est un raccourci qui permet de taper directement: le_nom_chemin_de_ton_fichier (plutot le + souvent ./le_nom_chemin_de_ton_fichier ) Tu peux en faire de même pour tout shell, du python, du perl, php ... ça n'a pas de lien avec sh.
Par contre ensuite le # en 1er caractère de sh est interprété comme un commentaire et donc ignoré, dans ton cas le #fi est donc ligne de commentaire et le if n'est pas fermé.
Code : Tout sélectionner
#!/bin/sh
result=$(curl -s http://192.168.X.XX:XXXX/json.htm?type=devices&rid=9l jq -r .result[].Havetimeout)
echo $result
if [ $result = "false" ]
then
sudo service domoticz.sz restart
fi
Ca devrait aller mieux, le plus simple est de chercher des exemples sur le net, on trouve vite son bonheur sur des exemples de syntaxe.
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 07 nov. 2015, 10:02
par Gaz
Ok ok, je comprend mieux l'histoire du #.
Reste à trouver un exemple sur le net, enfin un exemple que je comprend...
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 07 nov. 2015, 11:16
par Gaz
ca avance un peu ce matin, j'ai corrigé une erreur de syntax, utilisation du l au lieu |
voici maintenant le script :
Code : Tout sélectionner
#!/bin/sh
result=$(curl -s "http://192.168.X.XX:XXXX/json.htm?type=devices&rid=9"| jq -r .result[].HaveTimeout)
echo $result
if [ $result = "true" ]
then
sudo service domoticz.sh restart
fi
Et le résultat une fois exécuté sur le NAS
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 07 nov. 2015, 12:31
par rimram31
Oops, je viens de relire le titre de ton post, tu es sur NAS synology, je ne connais pas l'OS linux qui tourne dessus (lsb_release -a ?) base debian ou redhat ??? Apparemment le package sudo ne soit pas être installé. Si tu l'appelles en ligne de commande, ça donne quoi ?
sudo ... indique que la commande doit être exécutée avec les privilèges root, selon l'OS ça pourrait être différent, il y a quelques différences subtiles entre un linux base debian et base redhat (histoire de faire simple ...). Si tu te loggues root par exemple, tu n'as pas besoin de préciser sudo puisque tu as déjà les privilèges root.
Cherche de l'aide du coté des utilisateurs de ce NAS pour en savoir plus.
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 07 nov. 2015, 13:01
par Gaz
voici le résultat :
Code : Tout sélectionner
SYNO> sudo
usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user
name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user
name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u
user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u
user name|#uid] file ...
SYNO> which sudo
/opt/bin/sudo
Re: Script .SH ne fonctionne pas (NAS Synology)
Publié : 07 nov. 2015, 15:00
par rimram31
Difficile de te débrouiller sans avoir la bête sous la main

mais le message d'erreur que tu as eu "sudo not found" indique que le shell ne trouve pas la commande sudo que tu trouves par contre facilement en ligne de commande. Je sèche un peu (exécutes tu le script dans le même environnement/terminal que lorsque tu exécutes sudo ???). Essayer peut-être de remplacer dans le script sudo par son chemin complet /opt/bin/sudo ?
Code : Tout sélectionner
#!/bin/sh
result=$(curl -s "http://192.168.X.XX:XXXX/json.htm?type=devices&rid=9"| jq -r .result[].HaveTimeout)
echo $result
if [ $result = "true" ]
then
/opt/bin/sudo service domoticz.sh restart
fi