Code shell

Résolu/Fermé
diabloic Messages postés 141 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 28 juillet 2014 - Modifié par diabloic le 16/01/2013 à 16:33
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 17 janv. 2013 à 15:29
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.

++


A voir également:

6 réponses

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
diabloic Messages postés 141 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 28 juillet 2014 5
16 janv. 2013 à 22:42
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
Utilisateur anonyme
17 janv. 2013 à 00:47
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
diabloic Messages postés 141 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 28 juillet 2014 5
17 janv. 2013 à 11:34
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 janv. 2013 à 12:37
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
17 janv. 2013 à 15:29
$ f="test1:2"

$ echo "$f" | grep -o '\B[0-9]*'
1

;-))
0
diabloic Messages postés 141 Date d'inscription mardi 3 novembre 2009 Statut Membre Dernière intervention 28 juillet 2014 5
Modifié par diabloic le 17/01/2013 à 13:33
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