Code shell

Résolu
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. 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.
    1. 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
      1. Contributeur
        $ f="test1:2"
        
        $ echo "$f" | grep -o '\B[0-9]*'
        1

        ;-))
    2. 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
      1. 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.
        1. 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 ;)
          ++
          1. 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?