Aide Débutant Unix
Sarphou
-
sarphou Messages postés 14 Statut Membre -
sarphou Messages postés 14 Statut Membre -
Bonjour,
tout d'abord soyez clément parce que je débute.
Mon problème est avant tout un problème de traduction, j'aimerais pouvoir traduire le fait d'appartenir à une liste de chaines.
Apparemment la boucle for me permet initialement de choisir un nom de valeur dans une liste de chaines, néanmoins j'aimerais reussir à le faire sans boucle.
Pour prendre un exemple : j'aimerais mettre une condition du type if nom_valeur appartient à grep [^df] nom_fichier
je sais que for nom_valeur in `grep [^df] nom_fichier`me prendra les memes valeurs seulement l'ennui c'est que je suis obligé de commencer une boucle après, or tout ce que je veux c'est mettre une condition.
Merci d'avance.
tout d'abord soyez clément parce que je débute.
Mon problème est avant tout un problème de traduction, j'aimerais pouvoir traduire le fait d'appartenir à une liste de chaines.
Apparemment la boucle for me permet initialement de choisir un nom de valeur dans une liste de chaines, néanmoins j'aimerais reussir à le faire sans boucle.
Pour prendre un exemple : j'aimerais mettre une condition du type if nom_valeur appartient à grep [^df] nom_fichier
je sais que for nom_valeur in `grep [^df] nom_fichier`me prendra les memes valeurs seulement l'ennui c'est que je suis obligé de commencer une boucle après, or tout ce que je veux c'est mettre une condition.
Merci d'avance.
9 réponses
Salut,
Je ne suis pas sûr d'avoir tout compris, mais bon...
Je ne suis pas sûr d'avoir tout compris, mais bon...
grep 'nom_valeur' < <(grep '[^df]' fichier) grep '[^df]' fichier | grep 'nom_valeur'devrait peut être faire ton affaire ;-))
je me suis trompé je voulais écrire ^[df].
En fait je comprends comment insérer ce que tu viens de me donner au sein de mon if.
En fait je comprends comment insérer ce que tu viens de me donner au sein de mon if.
Donne un exemple plus parlant (concret) de ce que tu veux, avec des exemples et à la limite la boucle "for" avec les "if...then...else" que tu ne veux pas et la sortie qu'elle génère. On essaiera d'adapter en fonction...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
très bien, je cherche à realiser un script.
ce script que fait-il ? il prend un parametre un fichier appelons le A.
dans A il y a deux colonnes de texte, dans la première il y a des lettres et dans la deuxième des mots :
d connexion
f arant
e rzigova
d rangeant
l'idée du script est de créer un fichier si la ligne commence par un f, un répertoire si elle commence par un d, si la lettre differe il doit faire un echo "lettre" : type inconnu.
donc dans mon exemple le fichier devrait creer un repertoire connexion, un fichier arant ....
plusieurs problèmes se posent à moi :
le premier c'est d'éviter qu'il me creer des fichier/repertoires d e et f, autrement dit je ne sais pas comment dire a mon script : "des que la ligne commence par un d tu sautes deux cases et tu crees un fichier avec le nom qui suit".
je sais que grep ^[d] A donne toutes les lignes qui commencent par d. Seulement je ne sais pas comment lui dire de "faire un saut". Donc je tente de multiples parades.
Ma derniere en tête était de créer une condition du type : if machin appartient a grep ^[d] A then mkdir "./$machin"
mais surtout [ "./$machin" != "./d" ].
seulement en plus de pas savoir comment lui demander de prendre un machin qui est dans un grep, je sais que mon test [ "./$machin" != "./d" ] empeche de creer n'importe quel répertoire qui s'appelle d, or ce n'est pas du tout ce que je veux car on peut toujours imaginer un fichier A avec une ligne :
d d
mon dernier probleme réside dans mon echo en cas de type inconnu, en effet pour n'importe quelle lettre autre que f et d je dois faire echo "lettre en question" : "type inconnu".
Or je ne sais pas du tout comment afficher la lettre en question (dans mon exemple il s'agit bien sur du e)
j'espère que tout est clair,
Merci d'avance.
ce script que fait-il ? il prend un parametre un fichier appelons le A.
dans A il y a deux colonnes de texte, dans la première il y a des lettres et dans la deuxième des mots :
d connexion
f arant
e rzigova
d rangeant
l'idée du script est de créer un fichier si la ligne commence par un f, un répertoire si elle commence par un d, si la lettre differe il doit faire un echo "lettre" : type inconnu.
donc dans mon exemple le fichier devrait creer un repertoire connexion, un fichier arant ....
plusieurs problèmes se posent à moi :
le premier c'est d'éviter qu'il me creer des fichier/repertoires d e et f, autrement dit je ne sais pas comment dire a mon script : "des que la ligne commence par un d tu sautes deux cases et tu crees un fichier avec le nom qui suit".
je sais que grep ^[d] A donne toutes les lignes qui commencent par d. Seulement je ne sais pas comment lui dire de "faire un saut". Donc je tente de multiples parades.
Ma derniere en tête était de créer une condition du type : if machin appartient a grep ^[d] A then mkdir "./$machin"
mais surtout [ "./$machin" != "./d" ].
seulement en plus de pas savoir comment lui demander de prendre un machin qui est dans un grep, je sais que mon test [ "./$machin" != "./d" ] empeche de creer n'importe quel répertoire qui s'appelle d, or ce n'est pas du tout ce que je veux car on peut toujours imaginer un fichier A avec une ligne :
d d
mon dernier probleme réside dans mon echo en cas de type inconnu, en effet pour n'importe quelle lettre autre que f et d je dois faire echo "lettre en question" : "type inconnu".
Or je ne sais pas du tout comment afficher la lettre en question (dans mon exemple il s'agit bien sur du e)
j'espère que tout est clair,
Merci d'avance.
[tmpfs]$ ls
A foo.sh*
[tmpfs]$ cat A
d connexion
f arant
e rzigova
d rangeant
[tmpfs]$ cat foo.sh
#! /bin/bash
while read line
do
case ${line:0:1} in
d) echo "Création du répertoire ${line:2}"
mkdir ${line:2}
;;
f) echo "Création du fichier ${line:2}"
touch ${line:2}
;;
*) echo "Lettre : \"${line:0:1}\" inconnue au bataillon."
;;
esac
done < $1
[tmpfs]$ ./foo.sh A
Création du répertoire connexion
Création du fichier arant
Lettre : "e" inconnue au bataillon.
Création du répertoire rangeant
[tmpfs]$ ls -l
total 8
-rw-rw-r-- 1 jp jp 41 nov 30 13:12 A
-rw-rw-r-- 1 jp jp 0 nov 30 13:21 arant
drwxrwxr-x 2 jp jp 40 nov 30 13:21 connexion/
-rwxrwxr-x 1 jp jp 256 nov 30 13:20 foo.sh*
drwxrwxr-x 2 jp jp 40 nov 30 13:21 rangeant/
[tmpfs]$ ;-))