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

Linux Discussion :

Comparaison de chaine et substitution en shell


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 52
    Points
    52
    Par défaut Comparaison de chaine et substitution en shell
    Bonjour,

    J'ai écrit des scripts bash il y a quelques temps qui fonctionnaient très bien (en utilisant /bin/bash), mais la cible sur laquelle je travaille ne contient que /bin/sh, et donc mon programme ne marche plus, et je n'arrive pas à débugger !

    J'ai notamment 2 problèmes : la comparaison des chaînes de caractères que je faisais ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    comp()
    {
         if [[ $1 == "chaine" ]]
         then
              echo OK
         fi
    }
     
    comp "PAS OK"
    On me dit tout d'abord que les "[[" ça ne veut rien dire, mais le problème persiste même avec un seul [.

    Le 2ème souci correspond à la substitution dans une chaîne. Voici mon code avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    subs()
    {
    chiffre=${1:0:1}
    }
     
    subs "3:B"
    Erreur : Bad substitution ...

    Mais là je vois vraiment pas !

    Je vous remercie d'avance !

    EDIT : J'ai trouvé pour la comparaison, il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if [ "$1" = "chaine" ];
    Par contre, je n'ai toujours pas trouvé pour la substitution ... et je ne veux pas passer par cut parce que ça n'a aucun rapport avec un fichier

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    bonjour,

    ...
    ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    bonjour,

    ...
    ?
    Oui ça ça marche, mais en fait, comme ma liste est un peu plus longue (du style A,B,C,D,E), la notation que j'employais était bien adaptée pour extraire l'un des éléments ... parce qu'avec #(#) et %(%), c'est toujours une notion de "plus grand ou plus petit depuis le début ou la fin" ... et à moins de stocker dans une variable à chaque fois le résultat pour lire toute la liste (ce que je trouve moche), n'y a-t-il pas un équivalent shell de ma ligne de bash ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    passe par un cut, alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var="3:B:4"
    chiffre=$(echo "$var" | cut -c1)
    echo $chiffre
    3
    cela équivaut, en utilisant une commande externe, à ${var::1}

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    passe par un cut, alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var="3:B:4"
    chiffre=$(echo "$var" | cut -c1)
    echo $chiffre
    3
    cela équivaut, en utilisant une commande externe, à ${var::1}
    Ok ça marche, je pensais que cut était réservé à la lecture des fichiers ...

    Merci N_BaH !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA]excel comparaison de chaine de caractere
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2006, 16h32
  2. [langage] Comparaison de chaîne
    Par Fastshadow dans le forum Langage
    Réponses: 7
    Dernier message: 05/09/2004, 19h58
  3. comparaison de chaines de caracteres en PLSQL
    Par biozaxx dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/08/2004, 10h41
  4. Comparaison de chaines
    Par Marc_P dans le forum Linux
    Réponses: 6
    Dernier message: 17/02/2004, 18h04
  5. [LG]comparaison de chaines de caracteres
    Par thesam dans le forum Langage
    Réponses: 6
    Dernier message: 20/05/2003, 23h41

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