Code shell
Résolu
diabloic
Messages postés
167
Statut
Membre
-
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
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.
++
ç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
-
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? -
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 ;)
++ -
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=>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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
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.