Aide pour script shell SVP
Résolu/Fermé
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
-
19 mai 2009 à 08:47
diaboly Messages postés 79 Date d'inscription dimanche 21 novembre 2004 Statut Membre Dernière intervention 10 février 2012 - 20 mai 2009 à 11:30
diaboly Messages postés 79 Date d'inscription dimanche 21 novembre 2004 Statut Membre Dernière intervention 10 février 2012 - 20 mai 2009 à 11:30
A voir également:
- Aide pour script shell SVP
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Microsoft activation script - Accueil - Windows
23 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
20 mai 2009 à 09:49
20 mai 2009 à 09:49
En théorie, oui, mais j'avoue que certaines pages de man (ou parties internes) sont parfois assez obscures pour ne pas dire incompréhensibles ;-\
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 mai 2009 à 10:10
19 mai 2009 à 10:10
Salut,
#! /bin/sh #set -xv while read line do entree=$(grep "${line#*;}" fic2) if [ -n "${entree}" ] then sed -i "/${line}/ s//& ${entree%;*}/" fic1 unset entree fi done < fic1;-))
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 11:36
19 mai 2009 à 11:36
Woah! merci pour ta réponse on ne peux plus précise, je vais tester ça.
Merci de m'avoir consacré du temps, je galère encore dessus depuis hier apres-midi....
Merci de m'avoir consacré du temps, je galère encore dessus depuis hier apres-midi....
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 11:57
19 mai 2009 à 11:57
Bon j'ai encore quelques petits soucis... ( je suis sous cygwin ce qui ne doit pas arranger les choses)
j'ai modifié les extensions de fichiers pour coller a mon cas.
lorsque je copie colle exactement le script donné plus haut j'ai ce message d'erreur:
J'ai donc supprimé les deux sauts de ligne, réduisant le nombre d'erreurs:
j'ai aussi testé sans rien toucher au script(en laissant sans extensions) rien ne change.
j'ai modifié les extensions de fichiers pour coller a mon cas.
lorsque je copie colle exactement le script donné plus haut j'ai ce message d'erreur:
$ ./script.sh ./script.sh: line 2: $'\r': command not found ./script.sh: line 4: $'\r': command not found ./script.sh: line 13: syntax error near unexpected token `done' ./script.sh: line 13: `done < fic1.csv'
J'ai donc supprimé les deux sauts de ligne, réduisant le nombre d'erreurs:
$ ./script.sh ./script.sh: line 11: syntax error near unexpected token `done' ./script.sh: line 11: `done < fic1.csv'
j'ai aussi testé sans rien toucher au script(en laissant sans extensions) rien ne change.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 mai 2009 à 12:23
19 mai 2009 à 12:23
je suis sous cygwin ce qui ne doit pas arranger les choses
Grrrrrrrrrrrrrrrrrrrrrrrr ;-(
Essaie de changer les fins de lignes, avec unix2dos si installé, ou avec "sed" (voir dans la FAQ Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF) )
Grrrrrrrrrrrrrrrrrrrrrrrr ;-(
Essaie de changer les fins de lignes, avec unix2dos si installé, ou avec "sed" (voir dans la FAQ Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF) )
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 13:41
19 mai 2009 à 13:41
Encore merci pour ton aide :)
je teste ça.
je teste ça.
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 14:13
19 mai 2009 à 14:13
Quand je converti en DOS to UNIX ça à l'air de marcher... enfin, le script se lance :D tout comme si je le colle directement dans la console.
Maintenant je dois avoir un problème de droits car j'ai ceci:
Je vais reflechir au problème...
Maintenant je dois avoir un problème de droits car j'ai ceci:
sed: cannot rename ./sedkjdtJq: Permission denied sed: cannot rename ./sedijScYK: Permission denied sed: cannot rename ./sedcNfuty: Permission denied sed: cannot rename ./sedycDfX1: Permission denied sed: cannot rename ./sedtvbzI1: Permission denied sed: cannot rename ./sedmrQt7l: Permission denied
Je vais reflechir au problème...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 mai 2009 à 14:18
19 mai 2009 à 14:18
On peut voir la tronche de ton script ?
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 14:24
19 mai 2009 à 14:24
Mais tout à fait :)
Sous notepad++ le code est celui ci:
C'est exactement le même que tu m'as donné avec l'extension des fichiers rajoutée.
j'ai droit à:
j'ai vérifié les droits de mes fichiers (clique droit propriété sécurité) j'ai le controle total sur ceux-ci... mes fichiers ne sont pas en lecture seule... :(
Merci.
Sous notepad++ le code est celui ci:
#! /bin/sh #set -xv while read line do entree=$(grep "${line#*;}" fic2.csv) if [ -n "${entree}" ] then sed -i "/${line}/ s//& ${entree%;*}/" fic1.csv unset entree fi done < fic1.csv
C'est exactement le même que tu m'as donné avec l'extension des fichiers rajoutée.
j'ai droit à:
$ ./script.sh ./script.sh: line 1: $'\357\273\277#!': command not found sed: cannot rename ./sedZbAM2X: Permission denied
j'ai vérifié les droits de mes fichiers (clique droit propriété sécurité) j'ai le controle total sur ceux-ci... mes fichiers ne sont pas en lecture seule... :(
Merci.
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 14:40
19 mai 2009 à 14:40
mon problème doit s'apeller windows XP ^^
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 14:45
19 mai 2009 à 14:45
$ ls -l total 91 -rwx------+ 1 moi ???????? 31947 May 18 16:47 FileMaker.csv -rwx------+ 1 moi ???????? 10974 May 18 16:47 GLPI.csv -rwx------+ 1 moi ???????? 183 May 19 14:09 Nouveau Docum -rwx------+ 1 moi ???????? 10974 May 18 16:47 fic1.csv -rwx------+ 1 moi ???????? 31947 May 18 16:47 fic2.csv -rwx------+ 1 moi ???????? 186 May 19 14:26 script.sh -rwx------+ 1 moi ???????? 186 May 19 14:11 script.txt
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 mai 2009 à 14:58
19 mai 2009 à 14:58
Bon 2 choses :
1- La 1ère erreur se situe sur le chemin de l'exécutable, as-tu bien un /bin/sh (ou un lien) ? Si non changes-en pour un chemin pointant vers bash ou sh...
2- La permission n'est pas sur tes fichiers, mais sur le fichier temporaire créé par "sed", dans "temp" (ou tmp), c'est là qu'il te faut les permissions (sous Unix normalement c'est bon, mais sous Windows je ne sais pas ;-\
1- La 1ère erreur se situe sur le chemin de l'exécutable, as-tu bien un /bin/sh (ou un lien) ? Si non changes-en pour un chemin pointant vers bash ou sh...
2- La permission n'est pas sur tes fichiers, mais sur le fichier temporaire créé par "sed", dans "temp" (ou tmp), c'est là qu'il te faut les permissions (sous Unix normalement c'est bon, mais sous Windows je ne sais pas ;-\
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 15:11
19 mai 2009 à 15:11
Un grand Merci pour ton dévouement
Je vais tester sur une station unix et te dirais ce qu'il en ai.
Développer sous windows complique encore plus la tâche... j'en ai vraiment marre.
Je vais tester sur une station unix et te dirais ce qu'il en ai.
Développer sous windows complique encore plus la tâche... j'en ai vraiment marre.
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 15:37
19 mai 2009 à 15:37
J'aurais aimé quelques précisions sur le script que tu m'a donné, si tu as du temps, car je ne trouve pas les réponses sur le net...
je dois mal chercher mais ça fais longtemps alors je me permet de te demander.
dans grep "${line#*;}" que signifie le #*; ???
dans sed -i "/${line}/ s//& ${entree%;*}/" fic1 /${line}/ s//& ${entree%;*}/ ça remplace par la valeur de la variable line mais après ???
je dois mal chercher mais ça fais longtemps alors je me permet de te demander.
dans grep "${line#*;}" que signifie le #*; ???
dans sed -i "/${line}/ s//& ${entree%;*}/" fic1 /${line}/ s//& ${entree%;*}/ ça remplace par la valeur de la variable line mais après ???
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 mai 2009 à 15:47
19 mai 2009 à 15:47
Pour comprendre il suffit d'essayer (et de lire man bash) :
En fait comme on a déjà préciser le motif "/${line}/", dans la commande de substitution (s) on n'a pas besoin de la répéter et le "s//" est en fait un synonyme de "s/${line}/". Donc tu peux écrire :
jp@MDK:~/tmpfs ssh$ var="2219;CNCT8DPGLN" jp@MDK:~/tmpfs ssh$ echo ${var#*;} CNCT8DPGLN jp@MDK:~/tmpfs ssh$ echo ${var%;*} 2219 jp@MDK:~/tmpfs ssh$Quant à la syntaxe de "sed", en fait ça ne remplace pas la valeur de "$line", enfin si, mais par elle même (&) suivi par la valeur de "${entree%;*}".
En fait comme on a déjà préciser le motif "/${line}/", dans la commande de substitution (s) on n'a pas besoin de la répéter et le "s//" est en fait un synonyme de "s/${line}/". Donc tu peux écrire :
sed -i "/${line}/ s//& ${entree%;*}/" fic1 ou sed -i "/${line}/ s/${line}/& ${entree%;*}/" fic1;-))
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
19 mai 2009 à 16:11
19 mai 2009 à 16:11
Mille Merci Ô grand Dieu d'Unix
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
20 mai 2009 à 08:33
20 mai 2009 à 08:33
où puis-je trouver plus d'infos sur ${var%;*} et ${var#*;} car je ne comprends pas la règle de fonctionnement malgré mes tests.... =)
diaboly
Messages postés
79
Date d'inscription
dimanche 21 novembre 2004
Statut
Membre
Dernière intervention
10 février 2012
22
20 mai 2009 à 08:33
20 mai 2009 à 08:33
où puis-je trouver plus d'infos sur ${var%;*} et ${var#*;} car je ne comprends pas la règle de fonctionnement malgrès mes tests.... =)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
20 mai 2009 à 08:39
20 mai 2009 à 08:39
Dans le "man bash" !
Si tu as les pages de man en français, tapes :
Si tu as les pages de man en français, tapes :
man bash -P 'less -p "^ Remplacement des paramètres"';-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
20 mai 2009 à 08:44
20 mai 2009 à 08:44
${paramètre#mot} ${paramètre##mot} Le mot est développé pour fournir un motif, comme dans l'expan- sion des noms de fichiers. Si le motif correspond au début de la valeur du paramètre, alors le développement prend la valeur du paramètre après suppression du plus petit motif commun (cas ``#''), ou du plus long motif (cas ``##''). Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel successivement, et le développement donne la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de suppression de motif est appliquée à chaque membre du tableau successivement, et le développement donne la liste finale. ${paramètre%mot} ${paramètre%%mot} est développé pour fournir un motif, comme dans l'expansion des noms de fichiers. Si le motif correspond à une portion finale de la valeur du paramètre, alors le développement prend la valeur du paramètre après suppression du plus petit motif commun (cas ``%''), ou du plus long motif (cas ``%%''). Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel successivement, et le développement donne la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de suppression de motif est appliquée à chaque membre du tableau successivement, et le développement donne la liste finale.