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 :

Recuperer le XX caractere


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut Recuperer le XX caractere
    Bonjour à tous,

    je voudrait savoir comment faire pour recuperer le XX caractere.

    Voici le cas concret:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FW-PROXY:/perso# ls9box --ip 192.168.1.1 --status | grep Connexion
    - Connexion Internet : up
    Je voudrait récupérer le up, ou bien récupérer une valeur si il y up ou pas.


    Mon du est de test si il y a la connexion internet si il y a pas cela enclenche un script.


    Merci d'avance

    guigui69

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    J'ai peut etre trouvé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up"
    Ceci va me renvoyer le nombre de fois ou il va voir exactement ce morceau de phrase?

    guigui69

  3. #3
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "`echo \"- Connexion Internet : up\" | grep -c \"Connexion Internet : up\"`"
    Ca va te retourner le nombre de fois ou il trouve "Connection Internet : up"

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Etat=$(ls9box | sed -n '/- Connexion Internet : up/s//0/p')
     
    if [ $Etat -ne 0 ]; then
       echo "lancement du script"
       script.sh
    else
       echo "Connection OK"
    fi
    En lisant cette page, j'aperçois qu'il est possible de n'obtenir que les informations de la connexion internetque retourne cette commande?

    parce que si ça se trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls9box --internet > /dev/null 2>&1 && echo "Connection OK" || echo "Lancement du script"
    ferait aussi bien...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Voila ce que retourne la commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    FW-PROXY:/perso# ls9box --ip 192.168.1.1 --internet
    ----- Connexion Internet -----
    - Nom de la session : ppp0
    - Id de la session : 5190
    - Nom du serveur d'accès PPPOE : SE800-CBA-4
    - Adresse IP PPPOE : ***************
    - Passerelle par défaut : *****************
    - Serveurs DNS : 86.64.145.159 213.203.124.147
    - Protocole :
    - net infra : adsl
    - net mode : router
    bizarrement cette commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ls9box | sed -n '/- Connexion Internet : up/s//0/p'
    me renvoie 0 alors que normalement c'est 1 car la ligne est OK.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FW-PROXY:/perso# ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up"
    1
    guigui69

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Citation Envoyé par guigui69
    bizarrement cette commande:
    Code :

    ls9box | sed -n '/- Connexion Internet : up/s//0/p'

    me renvoie 0 alors que normalement c'est 1 car la ligne est OK.
    En fait, c'est normal.
    La sortie de la commande ls9box est "redirigée" par un pipe vers sed, qui, s'il trouve une ligne correspondante, au lieu de n'afficher que cette ligne, affiche 0.
    On peut compléter ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls9box | sed -n '/- Connexion Internet : up/s//0/p; /- Connexion Internet : down/s//1/p'
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Voici mon 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #!/bin/bash
     
    Check_route_defaut=$(route | grep -cw "default         192.168.1.1")
    echo etape1-check de la passerelle si 1 = passerelle 192.168.1.1==>  $Check_route_defaut
    if [ $Check_route_defaut == 1 ];then
            echo "etape2- Si 1 (passerelle 192.168.1.1) check si connexion OK==> RAS ou non==>Changement de route"
            Check_connexion_neuf=$(ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up")
            echo etape3-check la connexion neuf ==> $Check_connexion_neuf
                    if [ $Check_connexion_neuf == 1 ]; then
                            echo RAS
                    else
                            #Route add default gw 172.16.0.175
                            #/etc/init.d/networking restart
                            echo Bascule sur la connexion de secours
                    fi
     
    else
            echo etape4-Si passerelle <> de 192.168.1.1 cela signifie qu on n est sur la connexion de secour
            Check_connexion_neuf=$(ls9box --ip 192.168.1.1 --status | grep -cw "Connexion Internet : up")
                    echo "etape5  On check si la connexion neuf est revenue, si oui on rebascule sur la connexion neuf si non on reste sur celle de secour" ==>$Check_connexion_neuf
     
                    if [ $Check_connexion_neuf == 1 ]; then
                            #Route add default gw 192.168.1.1
                            #/etc/init.d/networking restart
                            echo bascule sur la connexion neuf
                    else
                            echo reste sur la connexion de secours
                    fi
     
    fi
    echo "poursuite ..."

    Est-ce que mon script est correcte par rapport a mon explication? Y-a-t- il des erreurs?

    Merci

    guigui69

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Ce serait peut-être plus simple de "dessiner" un arbre de décision :
    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
    29
    #!/bin/bash
     
    addRoute() {
    route add default gw
    }
     
    defAddr="192.168.1.1"
    resAddr="172.16.0.175"
     
    Status=$(ls9box --ip $defAddr --status |grep -cw "Connexion Internet : up")
    Route=$(route |grep -cw "default *192\.168\.1\.1")
     
    case $((Route + Status)) 
     in
       2) addRoute $defAddr
       ;;
       1) case $Route
           in
             1) #donc $Status=0
                addRoute $resAddr
             ;;
             0) #donc $Status=1
                echo ?
             ;;
          esac
       ;;
       0) echo ?
       ;;
    esac
    Non ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Ci-joint le schéma.

    Merci pour ton script, j'essai de le comprend


    guigui69
    Images attachées Images attachées  

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    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
     
    addRoute() {
    route add default gw
    }
     
    defAddr="192.168.1.1"
    resAddr="172.16.0.175"
     
    Status=$(ls9box --ip $defAddr --status |grep -cw -- "- Connexion Internet : up")
    Route=$(route |grep -cw "default *192\.168\.1\.1")
     
    case $((Route + Status))
     in
       0) addRoute $resAddr
       ;;
       1) case $Route
           in
             0) addRoute $defAddr
             ;;
             1) addRoute $resAddr
             ;;
          esac
       ;;
       2) addRoute $defAddr
       ;;
    esac
    Voici le raisonnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                                  __ =1 ( => Route + Status = 2 ) --> defAddr
                                 /
               __ =1 -- Status -<
              /                  \__ =0 __
             /                            |__ ( => Route + Status = 1 )
    Route -<                      __ =1 __|        si Route=0 ( => Status = 1 ) --> defAddr
             \                   /                 si Route=1 ( => Status = 0 ) --> resAddr
              \__ =0 -- Status -<
                                 \__ =0 ( => Route + Status = 0 ) --> resAddr
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/bin/bash
     
    addRoute() {
    route add default gw
    }
    il semble que le route add pose soucis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    Syntaxe: inet_route [-vF] del {-host|-net} Cible[/prefix] [gw Gw] [metric M] [[dev] If]
           inet_route [-vF] add {-host|-net} Cible[/prefix] [gw Gw] [metric M]
                                  [netmask N] [mss Mss] [window W] [irtt I]
                                  [mod] [dyn] [reinstate] [[dev] If]
           inet_route [-vF] add {-host|-net} Cible[/prefix] [metric M] reject
           inet_route [-FC] flush      PAS supporté

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Peut-être. Je n'ai pas testé ce script.

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    addRoute=$(route add default gw)
    # appelé ainsi :
    $addRoute $defAddr
     
    # ou
    addRoute="route add default gw"
    # appelé ainsi
    eval $addRoute $defAddr
    Mais, peut-être que ça fonctionnera mieux ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    addRoute() {
    route add default gw $1
    }
    désolé
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    829
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 829
    Par défaut
    Voici le 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #!/bin/bash
     
    addRoute() {
    route add default gw $1
    }
     
    delRoute() {
    route del default gw $1
    }
     
     
    defAddr="192.168.1.1"
    resAddr="172.16.0.175"
     
    Status=$(ls9box --ip $defAddr --status |grep -cw -- "- Connexion Internet : up")
    Route=$(route |grep -cw "default *192\.168\.1\.1")
     
    case $((Route + Status))
    in
       0)
            echo 1
            delRoute $defAddr
            addRoute $resAddr
       ;;
       1) case $Route
           in
             0)
                    echo 2
                    delRoute $resAddr
                    addRoute $defAddr
             ;;
             1)
                    echo 3
                    delRoute $defAddr
                    addRoute $resAddr
             ;;
          esac
       ;;
       2)
                    echo 4
                    delRoute $resAddr
                    addRoute $defAddr
       ;;
    esac

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    C'est efficace...
    C'est clair...

    Sera-ce robuste*...


    * c'est laid, mais drôle, parce qu'inusité alors que ça semble correct (?)
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [Toutes versions] Recuperer chaine de caracteres entre balise de W vers Excel
    Par djamat dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 06/05/2013, 09h54
  2. [MySQL] Probleme recuperation chaine de caracteres
    Par darkxel dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/06/2011, 11h35
  3. recuperer le 1er caractere
    Par acik59 dans le forum C
    Réponses: 7
    Dernier message: 14/05/2007, 15h31
  4. Réponses: 1
    Dernier message: 23/06/2006, 14h19
  5. Réponses: 7
    Dernier message: 18/11/2004, 12h32

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