CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

script bash : prb de découpage

sd460
sd460
Niveau 10
10 juillet 2009 à 18:50:17

Bonjour,

Je suis en train de faire un script, et je galère un peu du fait surement de ma mauvaise connaissance de bash.

J'ai un fichier de template que je voudrais utiliser pour générer un fichier php.
Donc j'ai mis marqueur dans ce template : "---" qui me permet de savoir a quel moment je dois pas faire les insertions.
Jusque là tout va bien si j'ose dire.
Après mon prb est que je veux réaliser l'insertion au mileu du fichier texte au bon endroit (par milieu, j'entend pas à la fin ni au début...)

J'ai découvert la commande split, et je n'arrive pas à l'utiliser correctement...

  1. Creation of the registration page

101 touch $registrationPage
102 cat ${templateDir}/registrationTEMPLATE.php >>${registrationPage}
103 cp $registrationPage ${registrationPage}CoPy
104
105 #Form data are added
106 i=0
107 while read parser dep
108 do
109 (( i++ ))
110 if [[ $parser == "---" ]]
111 then
112 if [[ $dep == "DEPENDANCE_FORM" ]]
113 then break;
114 fi
115 fi
116 done <$registrationPageCoPy
117
118 echo $i
119 split -l $i $registrationPage TMPfile
120 rm ${registrationPage}CoPy

La boucle while me sert à compter les lignes, pour savoir ou faire l'insertion.
Je pensais ne pas avoir besoin de copier $registrationPage, mais ca ne marchait pas, c'est pourquoi je suis passé par $registrationPageCopy, mais au final, je ne suis pas plus avancé....

J'ai foiré quoi ?

sd460
sd460
Niveau 10
10 juillet 2009 à 18:58:26

J'ai oublié la fin du script :noel:

J'ai supprimé les lignes d'instructions...
En fait mon problème c'est que le début du fichier de template est supprimé...

124 set $fields
125 for field
126 do
127 echo "For the fiel '$field' chosse among :"
128 echo "1 - SELECT"
129 read -p "Your choice : " choice
130 if (( $choice == 1 ))
131 then
132 echo "INSTRUCTION" >>TMPfileaa
142 else break
143 fi
144 done
145
146 cat TMPfile* >$registrationPage

chris_27
chris_27
Niveau 10
10 juillet 2009 à 19:49:02

Uitliser un wall ne serait pas du luxe :

1) les numéros de lignes ça fait suer si on veut copier/tester ton truc
2) la coloration syntaxique c'est pas fait juste pour kikoololé
3) l'indentation non plus.

:-)

Sinon, un exemple d'utilisation de la commande split :
$ ls
debian-K16-hurd-i386-mini.iso
$ split -b 10M debian-K16-hurd-i386-mini.iso toto
$ cat toto* > plop.iso
$ ls -l
-rw-r--r-- 1 chris share 52523008 fév 20 2008 debian-K16-hurd-i386-mini.iso
-rw-r--r-- 1 chris share 52523008 jui 10 19:47 plop.iso
-rw-r--r-- 1 chris share 10485760 jui 10 19:47 totoaa
-rw-r--r-- 1 chris share 10485760 jui 10 19:47 totoab
-rw-r--r-- 1 chris share 10485760 jui 10 19:47 totoac
-rw-r--r-- 1 chris share 10485760 jui 10 19:47 totoad
-rw-r--r-- 1 chris share 10485760 jui 10 19:47 totoae
-rw-r--r-- 1 chris share 94208 jui 10 19:47 totoaf
$

sd460
sd460
Niveau 10
12 juillet 2009 à 10:25:46

Oui c'est pas faux, j'ai pas assez l'habitude d'utiliser un wall... ce qui est réparé :

http://pastebin.com/m795df3d9

En fait j'arrive à utiliser la commande split, j'obtiens bien plusieurs fichiers TMPfileaa, TMPfileab, ...
Sauf qu'au final il me manque une partie du fichier (la première) ...

La je suis pas devant mon ordi, donc j'ai pas le résultat sous les yeux, je me demandais si le prb ne venait pas de la mauvaise utilisation du while ?

En gros mon problème consiste juste a couper en deux un fichier texte (au bon endroit) et à rajouter du texte à cet endroit.
Je n'ai pas d'autres solutions que d'utiliser un while, car je ne connnais rien d'autre pour trouver la bonne ligne. Il en existe peut-être d'autre ?

chris_27
chris_27
Niveau 10
12 juillet 2009 à 11:15:19

Tiens, avec la coloration on voit apparaître des chose. :-)

ligne 17 : $registrationPageCoPy
VS
lignes 4,23 : ${registrationPage}CoPy

Sinon :
:d) j'ai pas pigé le commentaire ligne 19 :(
:d) la boucle ligne 26 a l'air moisie.
:d) il manque un 'd' ligne 28.
:d) tu es sûr de vouloir toucher à TMPfileaa ligne 33 ?
:d) tu pourrais monter une exécution concrète de ton script (on n'a aucune valeur pour les différentes variables là).

sd460
sd460
Niveau 10
12 juillet 2009 à 11:49:42

"ligne 17 : $registrationPageCoPy
VS
lignes 4,23 : ${registrationPage}CoPy "

:d) Il me semble que j'avais effectivement noter ca et que la correction n'avais pas apporté grand chose :doute: Je vérifierai quand même la prochaine fois que j'ouvre ca.

commentaire de la ligne 19 :d) je voulais juste dire que j'affiche le i pour que je puisse vérifier que je sélectionne bien la bonne ligne.

boucle ligne 26 :d) c'est pour faire une sélection en fonction du type de <input> que je veux faire apparaitre sur la page web. pour l'instant je n'ai traité qu'un cas.
A la place de "INSTRUCTIONS" j'écris des balises html, je ne les ai pas mise ici car je pourrai écrire n'importe quoi, vu que pour l'instant je ne cherche qu'a écrire , pour la cohérence de ce que j'écris dedans on verra après :)

ligne 28 :d) comment ca ? Ca sert à quoi ce 'd' :question: Pour le coup je jongle entre affichage sur la sortie standard (écran) et écriture dans le fichier.

ligne 33 :d) Il me semble que oui, car je veux insérer les lignes au milieu du fichier. Donc entre TMPfileaa et TMPFILEab. Donc je dirais que c'est bien à la fin de TMPfileaa...

exécution du script :d) ok, je ferais un cc la prochiane fois que je l'exécute.

chris_27
chris_27
Niveau 10
12 juillet 2009 à 13:20:28

« Il me semble que oui, car je veux insérer les lignes au milieu du fichier. » :d) alors là vient la question qui tue : pourquoi n'utilises-tu pas sed ou awk qui sont fait pour ça ?

Sinon, pour la remarque sur la ligne 26, elle portait juste sur la ligne 26 : ce début de boucle est bizarre. La syntaxe c'est :
:d) for VAR in LISTE ; do ... ; done

Jackass059
Jackass059
Niveau 10
12 juillet 2009 à 17:02:23

J'ai pas lu les réponses, ni tout ton message, mais pour les templates souvent on utilise sed.
Enfin, c'est ce que je fais avec certains de mes projets en C.

Sur ce, je retourne lire le sujet :D

sd460
sd460
Niveau 10
12 juillet 2009 à 18:55:37

"alors là vient la question qui tue : pourquoi n'utilises-tu pas sed ou awk qui sont fait pour ça ?"

:d) Il me paraissait plus pratique de faire ca avec un split. Plus pratique pour la mise en forme, mais aussi parceque j'ai des variables qui fixe le nombre de lignes à insérer. Dans un sed ca me paraissait un peut trop dense pour pouvoir le faire. Quand à awk je ne connais pas. Je vais un tour du coté du man alors.

Jackass059 :d) mmmh je comprend qu'un sed puisse faire ca, mais j'ai des conditions sur le nombre de lignes à insérer et sur la forme de ces lignes... Je vois pas trop comment faire tenir ca dans un sed de facon claire.

Au final i lest fort possible que je ne connaisse pas la bonne facon d'utiliser sed pour ce type d'exercice... Je vais jeter un coup dans le man alors.

chris_27
chris_27
Niveau 10
12 juillet 2009 à 19:25:24

sd460 : l'idée avec sed, ce qui tu as un template = squelette de fichier avec des "trous" symbolisés par disons la suite de caractères "<TOTO>". Ensuite, au moment de passer du squelette au vrai fichier, tu n'as plus qu'à faire un :

$ sed "s|<TOTO>|<p>Bonjour $USER_NAME</p>|" registrationPage.html.tmpl > registrationPage.html

pour changer le premier "<TOTO>" en "<p>Bonjour sd460</p>". :-)

sd460
sd460
Niveau 10
13 juillet 2009 à 10:12:42

ok, je vais tester avec sed alors.

En fait, au final ca marche avec mon while et ma découpe de fichier : je n'avais effectivement pas corrigé les {} , ce qui faisait planter le tout.

Par contre ce n'est pas très élégant de passer par l'intermédiaire de fichiers temporaires qui sont supprimés à la fin de l'exécution du script....
Je vais peut-etre laisser comme ca pour l'instant et revenir dessus plus tard...

Pour bien faire : j'aimerai pouvoir récupérer mon numéro de ligne qui contient mon marqueur. Comment faire ca autrement qu'avec mon while ?

merci

chris_27
chris_27
Niveau 10
13 juillet 2009 à 12:48:07

« Pour bien faire : j'aimerai pouvoir récupérer mon numéro de ligne qui contient mon marqueur. Comment faire ca autrement qu'avec mon while ? » :d) à coup sur, awk fait ça. Il me semble que c'est l'option -n pour grep. Quant à sed, fouille dans le man mais c'est ça doit être faisable aussi.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware