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 :

in_array en sh


Sujet :

Linux

  1. #1
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut in_array en sh
    Bonjour,

    Existe-t'il une fonction en shell identique au in_array en PHP ?

    Exemple :
    Je dispose d'un tableau de chaine.
    Je parcours un répertoire du système.
    Je vérifie si le sous-répertoire en cours se trouve dans le tableau de chaine.

    Je souhaite donc faire un : if (in_array($val, $tab)) mais en SHELL

    Vous savez comment procéder?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par speedev Voir le message
    Bonjour,

    Existe-t'il une fonction en shell identique au in_array en PHP ?
    Ben non. Le php est bien plus récent !!!

    Exemple :
    Je dispose d'un tableau de chaine.
    Je parcours un répertoire du système.
    Je vérifie si le sous-répertoire en cours se trouve dans le tableau de chaine.

    Je souhaite donc faire un : if (in_array($val, $tab)) mais en SHELL

    Vous savez comment procéder?
    Tu te paluches ta petite fonction in_array tout seul.

    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
    #!/bin/sh
    in_array()
    {
         super algo de recherche
         return 0 (si la chaîne y est) ou return 1 (si elle n'y est pas)
    }
     
    ...
    ...
     
    if in_array $val $tab
    then
         echo "la chaîne $val est présente"
    else
         echo "la chaîne $val n'est pas présente"
    fi
    Ou alors tu passes à Python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/usr/bin/env python
    tab=["hello", "world"]
    if "hello" in tab: print "yes" else: print "no"

  3. #3
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Une possibilité avec grep :

    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
     
    Liste="rep1 rep2 rep3 rep4 rep5"
     
    FctRechDir()
    {
    	echo $Liste | grep -qw $DirName 
    	if [[ $? -eq 0 ]] ; then
    		echo "+ $DirName trouvé"
    	else
    		echo "+++ $DirName PAS trouvé !!!"
    	fi
    }
     
    DirName="rep1"
    FctRechDir 
     
    DirName="rep10"
    FctRechDir
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    + rep1 trouvé
    +++ rep10 PAS trouvé !!!

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BlaireauOne Voir le message
    Une possibilité avec grep :

    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
     
    Liste="rep1 rep2 rep3 rep4 rep5"
     
    FctRechDir()
    {
    	echo $Liste | grep -qw $DirName 
    	if [[ $? -eq 0 ]] ; then
    		echo "+ $DirName trouvé"
    	else
    		echo "+++ $DirName PAS trouvé !!!"
    	fi
    }
     
    DirName="rep1"
    FctRechDir 
     
    DirName="rep10"
    FctRechDir
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    + rep1 trouvé
    +++ rep10 PAS trouvé !!!
    Oui mais je préfèrerais que la fonction ne fasse pas d'echo mais renvoie un code retour ok/nok. Charge à l'appelant de gérer ce code comme il le désire pour faire des trucs (afficher ou autre chose).

    Ensuite comme il parlait de "tableaux" j'ai pas trop voulu m'étendre. Ta fonction ne traite pas un tableau mais une liste. Sinon évidemment j'aurais proposé ma solution perso
    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
    in_liste()
    {
            mot=$1; shift
    	echo $* | grep $mot 1>/dev/null
    	return $?
    }
     
    for arg_test in rep1 rep10
    do
        if in_liste $arg_test "rep1 rep2 rep3 rep4 rep5"
        then
             echo "$arg_test y est"
         else
             echo "$arg_test n'y est pas"
        fi
    done

Discussions similaires

  1. [Système] utilisation de la fonction in_array
    Par WalidNat dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2006, 19h23
  2. [Tableaux] fonction in_array inopérante
    Par nicoaix dans le forum Langage
    Réponses: 7
    Dernier message: 21/04/2006, 19h37
  3. [Tableaux] in_array
    Par Anduriel dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2006, 18h37
  4. [Tableaux] in_array VS isset
    Par Mr N. dans le forum Langage
    Réponses: 10
    Dernier message: 19/01/2006, 15h02
  5. [Tableaux] problème avec array_search et in_array
    Par Devil666 dans le forum Langage
    Réponses: 2
    Dernier message: 19/01/2006, 14h47

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