Code shell

Résolu
diabloic Messages postés 167 Statut Membre -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

ça faisait longtemps que je n'étais pas venu, sympas le nouveau forum ;).

J'ai besoin d'aide sur un bout de code, je pense que pour vous cela va être facile.

ex :
################
/ccm/test> ls

toto

tatatiti

testtest

test2

test1:2

test1:3

test1:4
################

Je voudrais parcourir le dossier "test" et récupérer le preimier chiffre (soit 1 dans cette exemple) dans une variable.

#/bin/sh

###je récupère le chiffre 1 dans la variable $x par exemple (correspondant à test1:... ==> je voudrais de l'aide sur ça...

for i in 6

do

#Pour utiliser $x comme ça plus tard

... eth$x:$i

done

Merci d'avance pour votre aide.

++

6 réponses

  1. Utilisateur anonyme
     
    salut,

    Ce n'est pas très clair.
    parcourir le dossier "test" :
    for f in test/*; do echo "$f"; done

    récupérer le preimier chiffre (soit 1 dans cette exemple)
    donc il faut s'occuper uniquement des fichiers qui ont le format suivant:
    [[:alpha:]]*[[:digit:]]:[[:digit:]]
    ?
    et ne récupérer que le premier chiffre (entre les lettres et le deux-points)?

    On peut faire ça en bash, ou est-ce que ça doit être 100% portable?
    0
  2. diabloic Messages postés 167 Statut Membre 5
     
    Bonjour,

    merci pour ta réponse et dsl pour le manque de clarté! Tu m'as quand même compris!

    =>J'aimerais parcourir le dossier "test" pour s'occuper uniquement des fichiers qui ont le format [[:alpha:]]*[[:digit1:]]:[[:digit2:]].

    => oui récupérer digit1.

    J'aimerais qu'il soit en .sh pour l'exécuter facilement car je vais m'en servir pour tester des processus.

    Si quelqu'un arrive a m'aider pour ça, je vais récupérer ce chiffre dans la variable $x par exemple et faire un truc du genre :

    for i in 6

    do

    #Pour utiliser $x comme ça plus tard

    ... eth$x:$i

    done

    Comme ça je vais pouvoir effectuer des actions sur les interfaces eth$x:$i

    J'espère que j'ai été plus clair.

    Merci ;)
    ++
    0
  3. Utilisateur anonyme
     
    C'est quoi ce 6 ?
    for est censé boucler sur une liste, mais 6 n'est pas une liste.

    Ça reste un peu flou

    Si on reprend ton répertoire test
    $ cd test
    $ echo *[0-9]:[0-9]
    test1:2 test1:3 test1:4
    Voilà, ça affiche la liste des fichiers correspondant à peu près au motif que j'ai décrit plus haut.

    Ensuite? Ici, il n'y a que des 1. Admettons qu'à la place d'un echo, on utilise un for...

    Il va falloir utiliser sed pour extraire ce nombre, et l'assigner à x.

    Tu veux répéter les opérations autant de fois qu'il y a de fichiers qui correspondent ?

    Donc on assigne x, et si x change, alors on assigne x à la nouvelle valeur, et on effectue les opérations.
    0
  4. diabloic Messages postés 167 Statut Membre 5
     
    1=>Le 6 c'était pour restarter 6 interfaces réseaux par exemple :

    restart eth[digit1]:[1 à 6].

    2=>Normalement dans ce dossier, si tu récupère le digit1 sur un élément qui a matché c'est bon tu arrêter car les autres auront le même digit1.

    3=>Et puis mois une fois que la valeur est extraite je pourrai m'en servir pour faire l'étape 1.

    Est ce plus clair?

    Merci encore
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    en sh, posix strict
    for f in test/*
    do
       y=$(echo "$f" |sed -n 's/.*\([0-9]\):.*/\1/p')
       test -n "$y" && {
          test "$y" != "$x" && {
             x=$y
             for i in $(seq 1 6)
             do
                echo "eth$x:$i"
             done
          }
       }
    done
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      $ f="test1:2"
      
      $ echo "$f" | grep -o '\B[0-9]*'
      1

      ;-))
      0
  7. diabloic Messages postés 167 Statut Membre 5
     
    Merci!! Je vais tester ça desuite.

    Je venais de faire ça x=$(ls |grep -o -m 1 "[0-9]")

    ça a l'air de fonctionner aussi.
    0