#26 Le 31/05/2006, à 06:53
- jr95
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Essaie avec
./toto.sh toto.rtf toto2.rtf 4
C'est du à la variable d'environnement PATH qui contient les répertoires où le shell doit chercher les commandes. Le répertoire courant (symbolisé par .) n'est pas dedans.
Ce que tu pourras faire une fois que ton script sera au point, c'est créer un répertoire "bin" dans ton home, puis ajouter ~/bin à la variable PATH dans le fichier ~/.bashrc en y ajoutant la ligne suivante :
PATH=$PATH:~/bin
La nouvelle valeur sera valide lors de la prochaine connexion (l'ouverture d'un nouveau terminal devrait suffire). Pour vérifier, il te suffit de taper "echo $PATH"
Hors ligne
#27 Le 31/05/2006, à 09:35
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Ok merci beaucoup, je sens que j 'approche du but ^^. ;)
Ce qui est chiant c'est que je sois tout le temps obligé d'attendre le soir pour essayer, y'a pas un moyen d'essayer sur Windaube ( à part installer Linux , c'est pas mon PC )
Sinon j 'essaierais ce soir mais je sens que ça va le faire, je te tiens au courant ce soir assez tot pour te donner le résultat et te dire si jamais j'ai un problème ;)
Hors ligne
#28 Le 31/05/2006, à 10:08
- jr95
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Je viens de voir que j'ai oublié d'écrire de copier le script toto.sh dans ~/bin
Une fois ces manips faites (copie + modif PATH), tu pourras utiliser le script depuis n'importe quel répertoire en tapant
toto.sh toto.rtf toto2.rtf 3
Hors ligne
#29 Le 31/05/2006, à 10:28
- Jonh Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Je viens de voir que j'ai oublié d'écrire de copier le script toto.sh dans ~/bin
Une fois ces manips faites (copie + modif PATH), tu pourras utiliser le script depuis n'importe quel répertoire en tapanttoto.sh toto.rtf toto2.rtf 3
Oh ok merci ça m 'aura éviter d'attendre le lendemain
#30 Le 31/05/2006, à 19:45
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Bonsoir bonsoir, je croyais avoir touché au but mais pas encore , j'ai mis ça
#!/bin/bash
if [ $# -lt 2 ]
then
echo "Usage : $0 <toto.rtf> <toto2.rtf> [4]"
exit 1
fi
zeINPUT=$1
zeOUPUT=$2
zeNUMBER=${3:-2}
while read line
do
echo $line
for (( i=1 ; i <= $zeNUMBER ; i++ ))
do
printf " %s\n"
# # echo "\n"
done
done < $1 >$2
puis chmod +x toto.sh
et ./toto.sh toto.rtf toto2.rtf 4
ET IL ME MET UNE ERREUR
./toto.sh: line 1: {rtf1macansicpg10000cocoartf824cocoasubrtf380: command not found
./toto.sh: line 2: syntax error near unexpected token `}'
./toto.sh: line 2: `{\fonttbl\f0\fnil\fcharset77 Monaco;}'
Le seul truc que j'ai compris c'est qu'apparemment il manque une } mais y'en a pas
Help .
Et si je pouvais le finir ce soir , je serais trop content
Hors ligne
#31 Le 31/05/2006, à 20:04
- cep_
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Tu as du faire une erreur qq part, il fonctionne bien ce script de jr95 :
:~$ wc -l lignes
9 lignes
:~$ bash scripts/ajout_lignes.sh lignes lignes2
:~$ wc -l lignes2
27 lignes2
#32 Le 31/05/2006, à 20:09
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Mais elle est où mon erreur puisque j 'ai fait que recopier ce qu'il y avait d'écrit :S :(:(
C'est ça
#!/bin/bash
if [ $# -lt 2 ]
then
echo "Usage : $0 <toto.rtf> <toto2.rtf> [4]"
exit 1
fi
zeINPUT=$1
zeOUPUT=$2
zeNUMBER=${3:-2}
while read line
do
echo $line
for (( i=1 ; i <= $zeNUMBER ; i++ ))
do
printf " %s\n"
# # echo "\n"
done
done < $1 >$2
Help
Est ce que le fait d'avoir pas mis de path mais d'etre dans le dossier lui meme ou se trouve le fichier .sh peut etre la cause ??
Dernière modification par John Smith (Le 31/05/2006, à 20:11)
Hors ligne
#33 Le 31/05/2006, à 20:15
- jr95
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
J'ai essayé avec divers fichiers texte et je n'ai pas eu de problème.
Cela peut peut-être venir du contenu du fichier toto.rtf. Si tu peux fournir un exemple de fichier (ou au moins les 10 premières lignes), cela faciliterai le debug.
Tu peux récuperer les 10 premières lignes d'un fichier texte par la commande "head -20 fichier".
Hors ligne
#34 Le 31/05/2006, à 20:23
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
J'ai l 'impression que mon beug vient du fait que j'utilise TextEdit un éditeur de texte sur MAC et que je l'ai enregistré en rtf et que j 'ai juste changé après l'extension en .sh à l 'arrache
Bah le fichier que j'utilise c'est toto.sh et y'a écrit ca dedans mais je l'ai déjà mis je crois :
#!/bin/bash
if [ $# -lt 2 ]
then
echo "Usage : $0 <toto.rtf> <toto2.rtf> [4]"
exit 1
fi
zeINPUT=$1
zeOUPUT=$2
zeNUMBER=${3:-2}
while read line
do
echo $line
for (( i=1 ; i <= $zeNUMBER ; i++ ))
do
printf " %s\n"
# # echo "\n"
done
done < $1 >$2
Question bête il faut bien que le fichier texte toto.rtf existe et que toto2.rtf n'existe pas c'est bien ca ?
Dernière modification par John Smith (Le 31/05/2006, à 20:26)
Hors ligne
#35 Le 31/05/2006, à 20:53
- jr95
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Je ne connais pas le MAC et encore moins TextEdit, mais je pense que tu as raison sur l'origine du bug; en regardant de plus près les messages d'erreurs, ils ressemblent à des en-têtes de fichiers au format rtf.
Si TextEdit le permet, enregistre ton fichier au format texte. Sinon, utilise un éditeur de texte qui ne rajoute pas d'en-tete (gedit ou vi sur Linux par exemple).
En réponse à ta question, il faut que toto.rtf existe.
Si toto2.rtf n'existe pas, il sera créé.
Si toto2.rtf existe déjà, son contenu sera remplacé.
Hors ligne
#36 Le 31/05/2006, à 20:57
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Ok je vais essayer ça tout de suite. Je vous dis ça le plus vite possible.
Hors ligne
#37 Le 31/05/2006, à 21:27
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
P.... je vais tout péter, j'ai pris Open Office et je l'ai mis en txt non codé. et apres j ai changé l extension et j ai mis toto.sh
Apres j'ai refais la manip et il me met Permission denied , donc je me dis je met su je met mon mot de passe pour etre en root mais il me remet Permission Denied , c'est quoi ce bord.. :(:(
Hors ligne
#38 Le 31/05/2006, à 21:47
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
non c bon j ai réussi j 'ai changé de logiciel et j 'ai enregistré en txt et CA MAAAAAAARCHE MERCI MILLE FOIS :):):):):):) Mais je pense à un petit truc :S :S tout minus, comment je fais si le fichier de destination existe deja , j'aurais voulu le faire choisir entre soit décider de l'écraser soit ne rien faire s'il vous plait.
Hors ligne
#39 Le 01/06/2006, à 09:28
- jr95
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
En insérant les lignes suivantes avant la boucle while, cela doit fonctionner :
if test -f $2
then
echo "Fichier $2 existe"
exit 1
fi
Tu peux aussi choisir d'ajouter à la fin du fichier s'il existe déjà (ou de le créer s'il n'existe pas) en remplaçant ">$2" par ">>$2"
Tu peux avoir plus de précisions sur les possibilités de test et de redirection en tapant "man bash".
Hors ligne
#40 Le 01/06/2006, à 10:19
- John Smith1
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Oki je vais essayer ce soir , merci
#41 Le 01/06/2006, à 20:21
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Oh désolé j'étais persuadé, vous avoir dit que ça marchait , j'était trop content, vous assurez trop ;);););). Ca m'étonne énormément que je ne vous l'ai pas dit et je tiens à m'excuser profondément :(.
J'aurais un nouveau défi à vous soumettre si cela était possible , s'il vous plaît, c'est si jamais j'entre des paramètres mauvais, comme oublie d'écrire le fichier de destination, nombre de ligne à sauter négatif, etc... que Terminal écrive dans ce modèle là s'il vous plait.
usage : interligne fichier_source fichier_destination interligne
Mais si par contre le nombre de ligne demandé en paramètre est de 0 que cela enlève toutes les lignes vides du texte ?
C'est possible j'espère . Merci par avance ;)
Hors ligne
#42 Le 02/06/2006, à 09:37
- jr95
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Le nombre d'arguments est déjà testé par le premier if
Pour vérifier que les arguments sont valides, il faut utiliser "test"
"test -f fichier" permet de tester l'existence d'un fichier
"test nombre -lt 0 " permet de tester la négativité d'un nombre
Il y a plein d'autres possibilités. La page de man de test les liste toutes.
Pour supprimer les lignes vides du fichier, la commande suivante devrait marcher :
sed '/^$/d' $1 > $2
Hors ligne
#43 Le 02/06/2006, à 11:56
- John Smith1
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Le nombre d'arguments est déjà testé par le premier if
Pour vérifier que les arguments sont valides, il faut utiliser "test"
"test -f fichier" permet de tester l'existence d'un fichier
"test nombre -lt 0 " permet de tester la négativité d'un nombre
Il y a plein d'autres possibilités. La page de man de test les liste toutes.Pour supprimer les lignes vides du fichier, la commande suivante devrait marcher :
sed '/^$/d' $1 > $2
Oki je vais essayer ça ce soir ^^. Mais faut que je mette tout ce script à quelle hauteur ?
Et plus particulièrement celui là sed '/^$/d' $1 > $2, car je ne sais pas où le mettre quand je mettrais
./toto.sh toto1.txt toto2.txt 0
Merci ;)
#44 Le 03/06/2006, à 21:36
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Le sed je le met où ?? :|
Hors ligne
#45 Le 04/06/2006, à 09:01
- jr95
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Tu mets le sed avant la boucle while dans la partie "then" d'un test. Cela devrait ressembler alors à :
if [ $zeNUMBER -eq 0 ]
then
sed '/^$/d' $zeINPUT > $zeOUPTUT
else
while read line
do
......... (les lignes actuelles)
done < $zeINPUT > $zeOUTPUT
fi
Hors ligne
#46 Le 04/06/2006, à 12:28
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
Bonjour ,
mon code ressemble à ça maintenant
#!/bin/bash
if [ $# -lt 2 ]
then
echo "Usage : $0 <toto1.txt> <toto2.txt> [4]"
exit 1
fi
zeINPUT=$1
zeOUPUT=$2
zeNUMBER=${3:-2}
if [ $zeNUMBER -eq 0 ]
then
sed '/^$/d' $zeINPUT > $zeOUPTUT
else
while read line
do
echo $line
for (( i=1 ; i <= $zeNUMBER ; i++ ))
do
printf " %s\n"
# # echo "\n"
done
done < $1 >$2
if [ -f "$2" ] ; then
echo "Remplacer $2 (o/n)";
read -r -e remplacer
if [ "$remplacer" != "o" ] ; then
exit 1;
fi;
fi
zeINPUT=$1
zeOUPUT=$2
zeNUMBER=${3:-2}
while read line
do
if [ $zeNUMBER = "0" ]
then
echo $line | tr -d "\n"
printf "%s"
else
echo $line
fi
for (( i=1 ; i <= $zeNUMBER ; i++ ))
do
printf " %s\n"
done
done < $1 >$2
mais lorsque j'écris ./toto.sh toto1.txt toto2.txt -3
il me donne comme réponse ça
./toto.sh: line 60: syntax error: unexpected end of file
et aussi comment je fais pour la partie " usage : interligne fichier _source fichier _destination interlignes comment je fais pour écrire le nombre le nombre d'interlignes que j'ai rentré et non pas 4 dans tout les cas ??
Merci
EDIT : j'ai corrigé le script j'ai enlevé
if [ $# -lt 2 ]
then
echo "Usage : $0 <toto.rtf> <toto2.rtf> [4]"
exit 1
fi
car il était écrit deux fois mais l'erreur est toujours là
Dernière modification par John Smith (Le 04/06/2006, à 12:37)
Hors ligne
#47 Le 04/06/2006, à 14:43
- John Smith
Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu
J'ai pensé à mettre un stderr pour si jamais le nombre d'argument n'est pas dans mon range et donc après de mettre echo " Veuillez entrer un nombre correct d'interlignes" mais je sais pas comment l'écrire :(.
Et ma condition pour remplacer le fichier déjà existant marche toujours que je mette Oui ou Non , quelqu'un peut m'aider s'il vous plaît . C'est très urgent
Hors ligne