Forum Programmation.shell Probleme de script...

Posté par  .
Étiquettes : aucune
0
17
mar.
2006
Bonjour

Je tente de faire un script sh, afin de traiter, pour une appli qui envoi sur un compte ftp, un dezippage des fichiers, mais uniquement si la presence d'un fichier de maj est présent...

Voici le code :

[code]
#!/bin/bash

cd photos/
if test -f maj.txt then rm -f maj.txt
if test -f photos.zip then unzip -o photos.zip
cp photos.zip old/photos_`date +%d%m%y`.zip
rm -f photos.zip
fi
fi
[/code]

Or à l'execution voici la reponse que j'ai
-bash: appli.sh: command not found

Quand je tente d'executer ligne à ligne le script en shell directement :
-bash: syntax error near unexpected token `fi'

Qq'un peut il m'expliquer mon erreur
  • # Les erreurs

    Posté par  (site web personnel) . Évalué à 3.

    1) Pour lancer le script, il faut faire ./appli.sh car bash ne cherche pas par défaut les commandes dans le répertoire courant, il les cherche dans l'ordre dans les répertoires que te renvoiera la commande echo $PATH

    2) En bash, les conditions ne s'écrivent pas comme celà il me semble : si tu ne veux pas passer à la ligne après la condition, il faut un point virgule avant le then.

    3) Personnellement, je n'écris pas les conditions commme cela en utilisant la commande test : j'utilise plutôt if [ -f maj.txt ]; then. Si tu veux utiliser test, je ne sais pas trop comment faire et j'ai la flegme de chercher.
    • [^] # Re: Les erreurs

      Posté par  . Évalué à 3.

      if [ -f maj.txt ]; then.

      Ca se remplace par :
      test -f maj.txt && rm -f maj.txt
      ou
      [ -f maj.txt ] && rm -f maj.txt
    • [^] # Re: Les erreurs

      Posté par  . Évalué à 1.

      en effet merci pour la solution...
      Je suis un noob, et je saurais que conditions prennent des ;

      J'ai donc corrigé et cela fonctionne parfaitement

      Un nouveau probleme toutefois se pose à moi...

      Je tente desormais d'executer cette commande a partir d'une page php...

      J'utilise donc dans ma page php :

      system('cardiff.sh');

      Juste la pas de soucis, page blanche...
      Mais par contre l'execution du script sh ne se fait pas... le zip n'est pas décompresser ce qui pose evidemment soucis...
      quelq'un peut me conseiller sur ce nouveau probleme ???

      tdldp
      • [^] # Re: Les erreurs

        Posté par  (site web personnel) . Évalué à 1.

        Pourquoi ne pas écrire ce que fait cardiff.sh directement en php pour commencer?
        http://fr2.php.net/manual/fr/function.file-exists.php
        http://fr2.php.net/zip
        http://fr2.php.net/manual/fr/function.unlink.php

        Ensuite, si tu veux absoluement mêler les languages, tu peux voir ce qui ne va pas en faisant echo system('cardiff.sh');
        • [^] # Re: Les erreurs

          Posté par  . Évalué à 1.

          La raison pour laquelle je n'ecris pas directement le script sh en php directement, vient du fait que le script sh peut etre appelé directement par le logiciel utilisé, (sans attendre un resultat ou un temps de chargement de page web) mais si on a un soucis avec le logiciel, on doit aussi pouvoir à la mano executer le script a partir de l'interface admin web du site du client...

          C'est pour cela que je veux utiliser system () et meler les languages surtout que php l'autorise normalement...


          Le retour de "echo system" donne : rien..
          Pas d'output.. nada, page blanche... mais ce qui est sur c'est que le script ne s'execute pas...

          sur une autre utilsation de script :
          system('cardiff.sh', $retval);

          j'ai comme retour unique : 127... ce qui je suppose signifie erreur 127.... Mais sans autre detail... Je n'arrive meme pas a trouver sur google la signification de cela, ni comment corriger le probleme...

          Une idée peut etre ???

          tdldp
          • [^] # Re: Les erreurs

            Posté par  . Évalué à 2.

            Il faut peut-être lui donner le chemin complet du script non ?
            • [^] # Re: Les erreurs

              Posté par  . Évalué à 1.

              Pause dejeuner passée par la... et du mal a m'y remettre je viens de me rendre compte d'une erreur...

              Le script :
              #! /bin/bash
              cd photos/
              if [ -f maj.txt ]; then rm -f maj.txt
              if [ -f photos.zip ]; then unzip -o photos.zip;
              cp -f photos.zip old/photos_`date +%d%m%y`.zip;
              rm -f photos.zip;
              fi
              fi

              fonctionne en ligne de commande.
              Par contre dans le fichier cardiff.sh, son appel en ligne de commande donne :

              [root@xxxx public_html]# cardiff.sh
              -bash: cardiff.sh: command not found

              je comprend pas ou est l'erreur (il fonctionne ce script en ligne de commande)

              Je suppose donc que l'erreur se repercute aussi lors de l'execution en mode php..
              J'ai testé aussi en utilisant #! /bin/sh et ca ne marche pas mieux... La je suis un peu perdu... (et debutant en linux ce qui n'aide pas..)

              qq'un a une idée...
              Est ce une question de chemin dans le script ???

              (mon bash et sh se trouvent tous les 2 dans /bin)

              Merci pour votre aide
              • [^] # Re: Les erreurs

                Posté par  . Évalué à 2.

                cf le commentaire que l'on t'a deja fais, pour lancer un script dans le repertoire courant il FAUT:
                -qu il est les droit d'execution: chmod +x tonscript
                puis le lancer par:

                ./tonscript

                le ./ son necessaire c'est pour une question de securité.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.