J'utilise AIX
Et quand je lance le script sh, il ne se passe rien. J'ai attendu un peu plus d'une minute et j'ai fait ^c.
Voilà ce que j'entend par bouclé
Version imprimable
J'utilise AIX
Et quand je lance le script sh, il ne se passe rien. J'ai attendu un peu plus d'une minute et j'ai fait ^c.
Voilà ce que j'entend par bouclé
Il ne boucle donc pas, il ne fait rien. C'est à dire qu'il attend une entrée au clavier vu que tu ne lui passes pas de fichier à traiter.
Corrige ton script comme je l'ai indiqué dans mon post précédent.
J'ai apporté les modifs suivantes :
et j'ai maintenant l'erreur suivanteCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 for file in test.pc do cp $test.pc $test.org awk ' /#include <gestimpr.h>/ { print $0 print "#include <userprog.h>" next } /EXEC SQL INCLUDE sqlca.h;/ { print $0 print "EXEC SQL INCLUDE bmtmain.h;" next } /char TcSortie[80];/ { print $0 print "char lib_err1[2000];" next } /EXEC SQL BEGIN DECLARE SECTION;/ { print $0 print "VARCHAR sessionid[21]," print "lib-err[2000]," print "paragraphe_err[80];" print "int cd_ret;" next } { print $0 } ' $file.org > $file done
imprÚvu.wk.sh: 0403-057 Erreur de syntaxe. ligne 3 : `do
Bonjour,
Quel shell utilises-tu ? Est-ce que ce shell comporte une instruction for qui s'écrit comme tu le fais ?
Par ailleurs, tu as un problème au début de ton script :
Ta variable n'est pas $test.pc, mais $fileCode:
1
2
3 for file in test.pc do cp $test.pc $test.org
En fait j'ai repris tout le code
Je le réexecute mais j'ai toujours la même erreurCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 for file in test.pc do cp $file $file.org awk ' /#include <gestimpr.h>/ { print $0 getline if ($0 != "#include <userprog.h>") { print "#include <userprog.h>" } print $0 next } /EXEC SQL INCLUDE sqlca.h;/ { print $0 getline if ($0 != "EXEC SQL INCLUDE bmtmain.h;") { print "EXEC SQL INCLUDE bmtmain.h;" } print $0 next } { print $0 } ' $file.org > $file done
Et j'utilise KSH
Rajoute
au début de ton script et relance le.Code:
1
2#!/bin/ksh
J'ai rajouté la ligne au début de mon script comme tu me l'as soumis, le programme fonctionne, mais il me rajoute #include <userprog.h> après chaque ligne. En plus j'ai toujours ^M qui s'affiche en début et à la fin de chaque ligne du programme.
Là je sais plus quoi faire.
Il y a beaucoup de choses inutiles ou en double dans ce que tu as testé.
Essaye ça, ce qui est sensiblement la même chose que ce que je t'ai déjà proposé:
Pour ce qui concerne les ^M, le problème est ailleurs.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 for file in test.pc do cp $file $file.org awk ' /#include <gestimpr.h>/ { print $0 print "#include <userprog.h>" next } /EXEC SQL INCLUDE sqlca.h;/ { print $0 print "EXEC SQL INCLUDE bmtmain.h;" next } { print $0 } ' $file.org > $file done
les ^M signifient que ton script est au format DOS au lieu du format UNIX.
C'est sans doute la raison des "syntax error" :mouarf:
Solutions pour éliminer les ^M :
ouCode:dos2unix nom_de_fichier
Code:
1
2 tr -d '\r' < nom_de_fichier > tmp mv tmp nom_de_fichier
Merci les gars, ça fonctionne.
Le truc c'est que j'ai pas trop compris la résolution de ^M
Je retravaille dessus
Les fichiers originaux viennent-ils d'une machine sous Windows ? Si oui, comment les transfères-tu ?
Pour régler le problème, tu peux inclure le tr au script:
Remplace la ligne:
} ' $file.org > $file
par
} ' $file.org | tr -d '\r' > $file
Je rédige mes scripts avec notepad++ et je les transfert par FTP avec Filezilla.
Merci mille fois, car tout est rentré dans l'ordre. Le fait d'insérer la modif de ton dernier message m'a enlevé tous les ^M.
J'ai fait évoluer mon script avec d'autres modif, et ça tourne très bien. J'ai mes insertions là où il faut et plus de ^M.
Merci encore