IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script shell SFTP


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Script shell SFTP
    Bonjour à tous avant de poster ce problème j'ai cherché la réponse à mon problème par tout sur le forum et ailleurs sur internet sans succès.
    Voilà mon problème.

    Je voudrait savoir s'il est possible de faire marcher un script shell avec des commandes sftp et la fonction while IFS:read .... done <$1
    Le but est de se servir d'un fichier script qui lance les commandes grâce a des variables contenues dans un fichier de configuration.

    => Exemple du fichier script "dump_database.sh":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # !/bin/bash
     
    DAY=$(date +"%Y-%m-%d")
    touch --date "$DAY" /root/file
     
    while IFS=: read NOM_CLIENT PATH_LOCAL RACINE_FICHIER_LOCAL SERVEUR_DEPOT PATH_DISTANT
    do
            # Accès par SFTP et purge ancien fichier de sauvegarde sur serveur
            sftp $NOM_CLIENT@$SERVEUR_DEPOT <<EOF
            pwd
            "cd /$PATH_DISTANT &&
            rm $RACINE_FICHIER_LOCAL*"
     
            # Sélection fichier le plus récent de sauvegarde et envoi sur serveur
            NOM_LAST_FICH=`find $PATH_LOCAL$RACINE_FICHIER_LOCAL* -type f -newer /root/file`
            put $NOM_LAST_FICH
     
            quit
            EOF
     
    done < $1
    => Fichier de configuration "db_list.txt":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dupont:/home/postgres/:dupont_dump-:serveur-dump.societe.com:database
    laurent:/home/postgres/:laurent_dump-:serveur-dump.societe.com:database
    => Commande à lancer pour faire marcher le tout: sh dump_database.sh db_list.txt.

    De cette façon le script va se répéter autan de fois que lignes il y a dans mon fichier de configuration. De mon coté j'ai essayé de le faire marcher mais dès que j'invoque les commandes SFTP le shell me retourne une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dump_database.sh: 11: dump_database.sh: cd /database && 
            rm dupont_dump-*: not found
    Petite précision, lorsque j'utilise le même script et fichier de configuration avec une commande SCP (et partage des clés RSA) à la place des commandes SFTP ça marche sans problème. Si je m'entête à vouloir le faire passer par SFTP c'est parce qu'il m'a été demandé obligatoirement pour mesure de sécurité.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    pourquoi utiliser sh si le shebang du script est bash ?
    pourquoi y a-t-il des commandes (apparemment shell) entre guillemets ?
    pourquoi le EOF final n'est-il pas dans la première colonne du fichier script ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour N_BaH,

    Comme tu as dû deviné (pas besoin d'être scientifique ) je suis loin d'être un flèche en script shell.
    Je ne suis même pas capable de répondre convenablement à tes questions.
    Dans le désordre:
    Les commandes (apparemment shell) (que moi jusqu'ici je croyait clairement shell ) sont les commandes de mon script initial que j'avait fait au début quand la sauvegarde était faite par SCP et non par SFTP j'ai dû mettre ces guillemets pour le faire marcher dans son ensemble. Quand j'ai dû adapté mon script pour le faire marcher avec des commandes SFTP j'ai pris l'existant et j'ai essayé d'adapter.
    En ce qui concerne EOF, au début quand j'ai voulu étudier les commandes de base de SFTP pour après créer le script j'a testé avec ce script simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # !/bin/bash
     
    sftp user@serveur.fr <<EOF
    cd dossier
    rm fichier-*
    put /path/fichier_sauvegarde
    quit
    EOF
    Et ça avait marché donc j'ai essayé aussi de l'adapter. Il est claire que je manque de connaissances de base mais je suis prêt à apprendre même si pour cela je vais passer pour un blaireau dans ce forum.
    Autrement excusez moi je vois que je ne pas ouvert la discussion dans la bonne rubrique.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bonjour,

    Si, tu es dans le bon forum, mais on ne comprend pas trop ce que tu veux faire (à part passer par sftp au lieu de scp):

    En principe, scp ne fais que de la copie de flux, on ne lance pas de commande à distance avec (Et, pour les petits malins, je n'ai jamais dis que l'on ne pouvait pas le faire ), donc je ne pense pas que ton sftp doit le faire...

    Peux-tu fournir le script avec scp qui fonctionne, et on pourra peut-être voir si on peut l'adapter à sftp ?
    Cordialement.

  5. #5
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Bonjour Disedorgue,

    Commençons donc par le commencement, c'est assez complexe. A la base il y a un serveur source, sur celui-ci il y a un dossier sur lequel tous les jours se déposent des fichiers de sauvegarde de différentes bases de données. Tous les jours le dernière fichier de sauvegarde de chaque base de données doit être envoyé vers un serveur destination dans un dossier spécifique et différent pour chaque fichier, mais avant, chaque dossier destination doit être purgé de l'ancienne sauvegarde.

    On m'a demandé (plutôt imposé ) que l'opération devait se faire grâce à un fichier script et un fichier de configuration sur lequel on va trouver les variables que le fichier script va prendre en charge.

    Alors voici le fichier script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # !/bin/bash
     
    if [ -f "$1" ];
    then echo "Le fichier "$1" existe"
    else echo "Le fichier "$1" n'existe pas"
    exit
    fi
     
    DAY=$(date +"%Y-%m-%d")
    touch --date "$DAY" /root/file
     
    while IFS=: read NOM_CLIENT PATH_LOCAL RACINE_FICHIER_LOCAL SERVEUR_DEPOT PATH_DISTANT
    do
     
            # Purge ancien fichier de sauvegarde sur serveur destination
            ssh $NOM_CLIENT@$SERVEUR_DEPOT "cd /home/$NOM_CLIENT/$PATH_DISTANT &&
            rm $RACINE_FICHIER_LOCAL*"
     
            # Selection nouveau fichier de sauvegarde sur le serveur source et envoi vers serveur destination
            NOM_LAST_FICH=`find $PATH_LOCAL$RACINE_FICHIER_LOCAL* -type f -newer /root/file`
            scp -pv $NOM_LAST_FICH $NOM_CLIENT@$SERVEUR_DEPOT:$PATH_DISTANT
     
    done < $1
    Et le fichier configuration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    utilisateur1:/home/postgres/:nombd_1-:serveurdistant.com:database
    utilisateur2:/home/postgres/:nombd_2-:serveurdistant.com:database
    utilisateur3:/home/postgres/:nombd_3-:serveurdistant.com:database
    Le script marchait parfaitement grâce un un clé RSA partagée entre les deux serveurs qui permettait de lancer la commande SCP sans avoir à taper le password ou le mettre en claire dans le fichier de configuration.
    Le problème c'est qu'un jour un accès SFTP a été configuré sur le serveur destination et chaque utilisateur du serveur destination partageant sa clé RSA avec le serveur source s'est vu modifier ces droits shell de /bin/bash à /bin/false et de ce fait le script utilisant la commande SCP n'est plus opératif.

    Maintenant on m'a demandé d'adapter le script on utilisant des commande SFTP à la place de SCP.
    J'espère avoir été clair (le français n'est pas ma langue maternelle) si ce n'est pas le cas je répondrait aux questions nécessaires.
    Merci d'avance.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour,

    Je vois juste un script local qui n'a qu'une seule ligne utilisant scp.
    Qu'est-ce qui te bloque pour remplacer cette unique ligne scp par une ligne sftp ?

    [edit] Si c'est le message d'erreur du début, 3 secondes de recherche t'auraient rappelé que la commande de suppression n'est pas remove (rm) mais delete (dele) comme indiqué ICI
    [/edit]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour,

    Je vois juste un script local qui n'a qu'une seule ligne utilisant scp.
    Qu'est-ce qui te bloque pour remplacer cette unique ligne scp par une ligne sftp ?

    [edit] Si c'est le message d'erreur du début, 3 secondes de recherche t'auraient rappelé que la commande de suppression n'est pas remove (rm) mais delete (dele) comme indiqué ICI
    [/edit]
    Bonjour Flodelarab,

    Merci pour votre aide mais ici il s'agit de SFTP et comme vous pouvez voir ICI la commande rm est bien prise en charge. D'ailleurs j'ai testé sans problème les commandes SFTP interactivement (sans script) pour la connexion au serveur destination (sftp user@serveur), l'accès au dossier (cd dossier), purge du contenu du dossier(rm *) et enfin envoi d'un fichier (put /path/fichier_sauvegarde) sans problème. Alors les commandes que je voudrait utiliser je les ai déjà et elles marchent (au moins en mode interactif). Je ne connais pas grande chose (ou plutôt rien) mais je ne crois pas que le problème soit là.

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Si tu lis bien ton propre lien, tu verras une subtilité dans l'utilisation du pluriel pour les autres commandes et du singulier pour la commande rm. Déjà, en ftp, lftp... il fallait utiliser des commandes spécifiques pour les suppressions multiples, téléchargements multiples, télédiffusions multiples.

    L'une des deux commandes suivantes fonctionnent-elles mieux?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glob rm $RACINE_FICHIER_LOCAL*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mrm $RACINE_FICHIER_LOCAL*
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  9. #9
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Si on revient à mon message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dump_database.sh: 11: dump_database.sh: cd /database && 
            rm dupont_dump-*: not found
    Corrigez moi si e me trompe, on voit que ça ne concerne pas seulement la commande rm mais aussi la commande cd.
    J'ai donc enlevé le guillemets pour séparer les deux commandes et pouvoir ainsi tester avec glob rm et mrm mais j'ai ces messages d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    transmission_db.sh: 31: cd: can't cd to /database
    transmission_db.sh: 32: transmission_db.sh: glob: not found
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    transmission_db.sh: 31: cd: can't cd to /database
    transmission_db.sh: 32: transmission_db.sh: rmr: not found

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Et que renvoie les commandes pwd et ls ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par PONCHITO Voir le message
    Si on revient à mon message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dump_database.sh: 11: dump_database.sh: cd /database && 
            rm dupont_dump-*: not found
    Corrigez moi si e me trompe, on voit que ça ne concerne pas seulement la commande rm mais aussi la commande cd.
    Oui. Tu te trompes (fallait pas tendre la perche! ).

    Il dit qu'il ne trouve pas la commande "cd /database &&
    rm dupont_dump-*
    ".

    Et je le comprends!
    Il n'existe pas (sauf erreur de ma part) de commande dont le nom soit: "cd /database &&
    rm dupont_dump-*
    "

    Par contre, il existe bien une commande qui s'appelle cd et qui peut probablement prendre en argument le chemin /database.
    Et il existe bien une commande qui s'appelle rm et qui peut prendre en argument une chaine comme dupont_dump-*.


    J'ai donc enlevé le guillemets
    Bonne idée!

    pour séparer les deux commandes
    Je dirais plutôt: pour remplacer une commande avec un nom aberrant par 2 commandes normales.

    D'ailleurs, pourquoi un RETURN entre les 2 ?

    et pouvoir ainsi tester avec glob rm et mrm mais j'ai ces messages d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transmission_db.sh: 31: cd: can't cd to /database
    Ah!
    Là, on voit qu'il a bien exécuté la commande cd, même qu'il a échoué à aller sur /database. Faudrait voir pourquoi!

  12. #12
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci pour les info jack-ft.

    Citation Envoyé par Flodelarab Voir le message
    Et que renvoie les commandes pwd et ls ?
    Pour pwd elle renvoie le path du serveur source et pas celui du distant et pour ls elle renvoi aussi le contenu du dossier du serveur source là où j'ai lancé la commande pour exécuter le script.
    Pourtant avant de me donner les erreurs il me dit bien qu'il a reussit à se connecter au serveur SFTP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connected to serveurdistant.com.
    En fait je crois qu'il ne pas possible d'utiliser les commandes sftp à l'intérieur de while IFS:read .... done <$1.

  13. #13
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    On avance.

    path du serveur source et pas celui du distant
    Ça veut dire quoi "serveur source" ? Tu es en train de créer un client. Il n'y a pas de serveur à la source.

    Une fois connecté au serveur, il faut lcd ou lls pour avoir une action locale.

    J'avoue que j'aurais préféré le résultat de console original plutôt que tu racontes. Quit à changer les noms confidentiels.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  14. #14
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    D'accord pour plus de clarté.
    Script avec pwd et ls: (J'ai commenté tout sauf ce que nous intéresse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # !/bin/bash
    if [ -f "$1" ];
    then echo "Le fichier "$1" existe"
    else echo "Le fichier "$1" n'existe pas"
    exit
    fi
     
    #DAY=$(date +"%Y-%m-%d")
    #touch --date "$DAY" /root/file
     
    while IFS=: read NOM_CLIENT PATH_LOCAL RACINE_FICHIER_LOCAL SERVEUR_DEPOT PATH_DISTANT
    do
            # Purge ancien fichier de sauvegarde sur serveur destination
            sftp $NOM_CLIENT@$SERVEUR_DEPOT
            pwd
            ls
            #cd /$PATH_DISTANT
            #rmr $RACINE_FICHIER_LOCAL*
     
            # Selection nouveau fichier de sauvegarde sur le serveur source et envoi sur serveur destination
            #NOM_LAST_FICH=`find $PATH_LOCAL$RACINE_FICHIER_LOCAL* -type f -newer /root/file`
            #put $NOM_LAST_FICH
     
            #quit
            #EOF
     
    done < $1
    Exécution de mon script et le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    root@psql-prod:~/script_sftp# sh transmission_db.sh db_list.txt
    Le fichier db_list.txt existe
    Connected to serveurdistant.com.
    /root/script_sftp
    db_list.txt  transmission_db.sh
    Donc pwd et ls me renvoie la position et la liste des fichiers et dossiers de là où j'ai lancé la commande pas ceux du serveur auquel je veux accéder par SFTP. Tu vois mieux Flodelarab ?
    Maintenant si j'essaye avec lcd et lls:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    # !/bin/bash
    if [ -f "$1" ];
    then echo "Le fichier "$1" existe"
    else echo "Le fichier "$1" n'existe pas"
    exit
    fi
     
    #DAY=$(date +"%Y-%m-%d")
    #touch --date "$DAY" /root/file
     
    while IFS=: read NOM_CLIENT PATH_LOCAL RACINE_FICHIER_LOCAL SERVEUR_DEPOT PATH_DISTANT
    do
            # Purge ancien fichier de sauvegarde sur serveur destination
            sftp $NOM_CLIENT@$SERVEUR_DEPOT
            lcd /$PATH_DISTANT
            lls
            #rmr $RACINE_FICHIER_LOCAL*
     
            # Selection nouveau fichier de sauvegarde sur le serveur source et envoi sur serveur destination
            #NOM_LAST_FICH=`find $PATH_LOCAL$RACINE_FICHIER_LOCAL* -type f -newer /root/file`
            #put $NOM_LAST_FICH
     
            #quit
            #EOF
     
    done < $1
    J'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    root@psql-prod:~/script_sftp# sh transmission_db.sh db_list.txt
    Le fichier db_list.txt existe
    Connected to serveurdistant.com.
    transmission_db.sh: 15: transmission_db.sh: lcd: not found
    transmission_db.sh: 16: transmission_db.sh: lls: not found

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Merci d'avoir envoyé le script. C'est plus facile à diagnostiquer.

    Il manque le "<< EOF" que tu avais dans ton premier post!!!

    C'est donc normal qu'il exécute le "ls" en local!

  16. #16
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Merci d'avoir envoyé le script. C'est plus facile à diagnostiquer.

    Il manque le "<< EOF" que tu avais dans ton premier post!!!

    C'est donc normal qu'il exécute le "ls" en local!
    Non, c'est moi qui vous remercie pour votre aide.

    Maintenant j'ai réintégré le <<EOF la commande quit puis EOF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    # !/bin/bash
    if [ -f "$1" ];
    then echo "Le fichier "$1" existe"
    else echo "Le fichier "$1" n'existe pas"
    exit
    fi
     
    #DAY=$(date +"%Y-%m-%d")
    #touch --date "$DAY" /root/file
     
    while IFS=: read NOM_CLIENT PATH_LOCAL RACINE_FICHIER_LOCAL SERVEUR_DEPOT PATH_DISTANT
    do
            # Purge ancien fichier de sauvegarde sur serveur destination
            sftp $NOM_CLIENT@$SERVEUR_DEPOT <<EOF
            pwd
            ls
            #cd /$PATH_DISTANT
            #pwd
            #rmr $RACINE_FICHIER_LOCAL*
     
            # Selection nouveau fichier de sauvegarde sur le serveur source et envoi sur serveur destination
            #NOM_LAST_FICH=`find $PATH_LOCAL$RACINE_FICHIER_LOCAL* -type f -newer /root/file`
            #put $NOM_LAST_FICH
     
            quit
            EOF
     
    done < $1
    L'exécution de la commande et son résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    root@psql-prod:~/script_sftp# sh transmission_db.sh db_list.txt
    Le fichier db_list.txt existe
    transmission_db.sh: 29: transmission_db.sh: Syntax error: end of file unexpected (expecting "done")
    Est-ce que c'est le "<<EOF" le "quit" ou le "EOF" qi sont mal placés ? car le "done" il est belle est bien là.

  17. #17
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Le EOF doit être placé en début de ligne...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  18. #18
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Le EOF doit être placé en début de ligne...
    Excuse moi Al1_24, je ne comprends pas ce que que tu veux dire par en début de ligne. Tu pourrais m'explique s'il te plaît ?

  19. #19
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Erreur classique.

    Tu as mis une tabulation avant EOF. Et ton indicateur de fin est EOF sans tabulation avant. Donc il faut supprimer la tabulation pour que EOF soit en début de ligne, et que le heredoc s'arrête. Le script alors s'execute.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Si je me souviens bien, ne peut-on mettre "<<-EOF" pour autoriser les tabulations de début de ligne?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Script shell SFTP
    Par Marty000 dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 18/01/2007, 09h34
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 09h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo