Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 31/05/2006, à 07: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, à 10:35

John Smith

Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu

Ok merci beaucoup, je sens que j 'approche du but ^^. wink;)

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 big_smile )

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 wink;)

Hors ligne

#28 Le 31/05/2006, à 11: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, à 11:28

Jonh Smith

Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu

jr95 a écrit :

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

Oh ok merci ça m 'aura éviter d'attendre le lendemain big_smile

#30 Le 31/05/2006, à 20: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 sad

./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 sad 

Help smile.
Et si je pouvais le finir ce soir , je serais trop content wink

Hors ligne

#31 Le 31/05/2006, à 21: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, à 21: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 sad:(:(


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 sad

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, à 21:11)

Hors ligne

#33 Le 31/05/2006, à 21: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, à 21: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, à 21:26)

Hors ligne

#35 Le 31/05/2006, à 21: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, à 21: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, à 22: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.. sad:(:(

Hors ligne

#38 Le 31/05/2006, à 22: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 big_smile:):):):):):)  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, à 10: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, à 11:19

John Smith1

Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu

Oki je vais essayer ce soir big_smile, merci wink

#41 Le 01/06/2006, à 21: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 wink;);););). Ca m'étonne énormément que je ne vous l'ai pas dit et je tiens à m'excuser profondément sad:(.

J'aurais un nouveau défi à vous soumettre si cela était possible neutral, 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 neutral . Merci par avance wink;)

Hors ligne

#42 Le 02/06/2006, à 10: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, à 12:56

John Smith1

Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu

jr95 a écrit :

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 wink;)

#44 Le 03/06/2006, à 22:36

John Smith

Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu

Le sed je le met où ?? sad:|

Hors ligne

#45 Le 04/06/2006, à 10: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, à 13:28

John Smith

Re : Enregistrer dans un nouveau fichier Script Linux Ubuntu

Bonjour smile,

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 sad

./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 wink


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à sad

Dernière modification par John Smith (Le 04/06/2006, à 13:37)

Hors ligne

#47 Le 04/06/2006, à 15: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 sad:(.

Et ma condition pour remplacer le fichier déjà existant marche toujours que je mette Oui ou Non sad , quelqu'un peut m'aider s'il vous plaît sad sad . C'est très urgent sad sad

Hors ligne