Forum Programmation.shell Erreur Boucle For avec EOF syntax error: unexpected end of file (Résolu)

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-1
15
mai
2013

Bonjour,

nous préparons un programme qui à partir d'une liste d'adresse IP va effectuer le contrôle des paquets et enfin indiquer les paquets critique à mettre à jour.

le programme fonctionne parfaitement lorsque nous mettons les IP en "dur" dans le script sans la boucle "for"

#!/bin/bash -x

IP_DEBIAN=`cat list.txt`
NOW=`date "+%d-%m-%y"`
for i in $IP_DEBIAN
do
echo $i
        DEBIAN_VERSION_NUMERIQUE=`ssh $i cat /etc/debian_version | cut -d . -f 1`


        case  $DEBIAN_VERSION_NUMERIQUE in
                4) DEBIAN_VERSION="etch"
                        ;;
                5) DEBIAN_VERSION="lenny"
                        ;;
                6) DEBIAN_VERSION="squeeze"
                        ;;
                7) DEBIAN_VERSION="wheezy"
                        ;;
                *) DEBIAN_VERSION="error"
                        ;;
        esac
        HOST=`ssh $i cat /etc/hostname`
        ssh $i debsecan --suite $DEBIAN_VERSION --format packages --only-fixed >> /tmp/check_package_$HOST_$NOW.txt

done

Merci pour vos réponses nous avons revue le programme en modifiant l’exécution de la façon suivante

#!/bin/bash -x

IP_DEBIAN=`cat list.txt`
NOW=`date "+%d-%m-%y"`
for i in $IP_DEBIAN
do
echo $i
        DEBIAN_VERSION_NUMERIQUE=`ssh $i cat /etc/debian_version | cut -d . -f 1`


        case  $DEBIAN_VERSION_NUMERIQUE in
                4) DEBIAN_VERSION="etch"
                        ;;
                5) DEBIAN_VERSION="lenny"
                        ;;
                6) DEBIAN_VERSION="squeeze"
                        ;;
                7) DEBIAN_VERSION="wheezy"
                        ;;
                *) DEBIAN_VERSION="error"
                        ;;
        esac
        HOST=`ssh $i cat /etc/hostname`
        ssh $i debsecan --suite $DEBIAN_VERSION --format packages --only-fixed >> /tmp/check_package_$HOST_$NOW.txt

done

  • # Mise en page

    Posté par  . Évalué à 3.

    • [^] # Re: Mise en page

      Posté par  . Évalué à -2.

      désolé pour la syntaxe mais rien que de faire le diez de façon convenable ainsi que les côtes avec AtlGr+7 c'est compliqué

      • [^] # Re: Mise en page

        Posté par  . Évalué à 4.

        utilise les ``` puis le langage utilisé, en debut de paragraphe
        et une nouvelle serie ``` pour fermer le paragraphe de code

        ca te fait la jolie coloration que j'ai mise sur ton poste.

        exemple :
        bash :

        toto=`cat liste`
        
        

        perl :

        toto=`cat liste`
        
        

        etc
        etc

      • [^] # Re: Mise en page

        Posté par  . Évalué à 2.

        Moi les côtes, je les préfère bleues quand c'est du boeuf, et bien grillées pour le porc.

        A moins que tu ne parles des ports de la côte ?

        Sinon si tu veux d'épargner les problèmes de quotes inversées, utilise $(..).

  • # Problème du journal?

    Posté par  . Évalué à 3.

    Parce que "IP_DEBIAN=cat list.txt" ça me parait curieux, ça marche ça?

    echo $IP_DEBIAN donne quoi?

  • # Boucle while

    Posté par  . Évalué à 1.

    Salut,

    Et puis pourquoi ne pas lire directement le fichier avec une boucle "while" ?

    while read ligne
    do
    ...
    ...
    done < list.txt
    
    

    ;-)

    • [^] # Re: Boucle while

      Posté par  . Évalué à 2.

      On pourrait. Mais là je pense avoir repéré 2 problèmes :
      - les ' ' autour de EOF
      - la commande après le for sans $( ) ou ``

      • [^] # Re: Boucle while

        Posté par  . Évalué à 2.

        Bon je viens de teste rle coup des quotes autour de EOF, et ça ne pose pas problème :

        # cat << 'EOF'
        > coucou
        > tioti
        > EOF
        coucou
        tioti
        # cat << EOF
        > coucou
        > tioti
        > EOF
        coucou
        tioti
        #
        
        
  • # quotes ?

    Posté par  . Évalué à 1.

    IP_DEBIAN=cat list.txt    
    
    

    ça ne serait pas mieux ainsi : ?

    IP_DEBIAN=`cat list.txt`    
    
    
    • [^] # Re: quotes ?

      Posté par  . Évalué à 0.

      C'est mon poste sur le message qui est mal enregistré mais sur le fichier original nous avons bien les côtes.

      • [^] # Re: quotes ?

        Posté par  . Évalué à 2.

        il vaut mieux utiliser $( ) : l'un des avantages est que tu peux les imbriquer.

      • [^] # Re: quotes ?

        Posté par  (site web personnel) . Évalué à 1. Dernière modification le 15 mai 2013 à 21:54.

        Rien à voir, mais vu qu'un commentaire précédents faisaient la remarque sans te corriger

        on dit "quote" (plus ou moins "kuote" en phonétique à l'arrache) en Anglais (d'où je pense la confusion avec "côte" en Français), j'avoue avoir mis un peu de temps à comprendre.

        • [^] # Re: quotes ?

          Posté par  . Évalué à 2. Dernière modification le 16 mai 2013 à 15:41.

          mais vu qu'un commentaire précédents faisai__en__t la remarque sans te corriger

          Je fais pareil : remarque sans corriger … ;)

          (Pas moyen avec la syntaxe de mettre en gras un bout de mot ….)

  • # Boucle sur i

    Posté par  . Évalué à 1.

    Bonjour

    L'un des problèmes me semble venir de la non-utilisation de la variable "i" dans la boucle :
    la variable "IP_DEBIAN" doit contenir plusieurs adresses IP ou nom d'hôtes, ce qui est problématique dans les commandes "ssh $IP_DEBIAN" (juste après le "do") et "scp $IP_DEBIAN:/..." (juste avant le "done") : il faudrait remplacer ça par "ssh $i" et "scp $i:/...", à mon avis.

    A+
    --
    Unk

    • [^] # Re: Boucle sur i

      Posté par  . Évalué à 0.

      Pour info le nouveau script fonctionne parfaitement

      Merci pour ton aide ;-)

Suivre le flux des commentaires

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