Création d'un script

Quand tu as un doute, ou que tu ne sais pas,
prends le réflexe d’aller lire page de manuel de la commande
ou/et de l’interpréteur de commandes que tu utilises.

Donc, tu pourrais rechercher la commande echo en lisant les pages man du bash :

man bash

pour y trouver, entre autres, ceci :

…
       echo [-neE] [arg ...]
              Output  the args, separated by spaces, followed by a newline.
              The return status is 0 unless a write error occurs.
              If -n is specified, the trailing newline is suppressed.
              If the -e option is given, interpretation of the following backslash-escaped characters is enabled.
              The -E option disables the interpretation of these escape characters, even on systems where they are interpreted by default.
              The xpg_echo shell option may be used to dynamically determine whether or not echo expands these escape characters by default.
              echo does not interpret -- to mean the end of options.
              echo interprets the following escape sequences:
              \a     alert (bell)
              \b     backspace
              \c     suppress further output
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \\     backslash
              \0nnn  the eight-bit character whose value is the octal value nnn (zero to three octal digits)
              \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
              \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
              \UHHHHHHHH
                     the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
…

Dans les fichiers f1.txt et f2.txt je n’ai mis que ce qui était demandé dans l’énoncé,
et dans cet énoncé, il n’était pas demandé de mettre un retour à la ligne,
donc, j’ai utilisé l’option n de la commande echo pour qu’il n’y ait aucun retour à la ligne dans ces deux fichiers.

Mais finalement, je réalise qu’en utilisant la commande tee
je n’ai pas tout-à fait respecté la demande de l’énoncé,
puisque ce n’est pas le contenu du fichier f3.txt qui est affiché,
c’est le flux qui est envoyé dans le fichier f3.txt qui s’affiche.

1 J'aime

Merci MicP c’est très gentil de ta part et c’est bien explique. je vois un peu plus clair les choses maintenant.

echo -n "Bonjour les amis" > f1.txt
echo "du cours SE2" > f2.txt
echo $(cat f1.txt)" "$(cat f2.txt) > f3.txt
cat f3.txt

ou même

echo "Bonjour les amis" > f1.txt
echo "du cours SE2" > f2.txt
echo $(cat f1.txt)" "$(cat f2.txt) > f3.txt
cat f3.txt
echo "Bonjour les amis" > f1.txt
echo "du cours SE2" > f2.txt
strings -s" " f1.txt f2.txt |sed 's#$#\n#'> f3.txt
cat f3.txt

Bof, bof pour cette espace explicite dans la commande complètement inutile fonctionnellement mais bien sûr essentielle pour perdre les élèves du cours SE2. :slight_smile:

fp2@debpacha:/tmp $ echo $(cat f1.txt) $(cat f2.txt)
Bonjour les amis du cours SE2
fp2@debpacha:/tmp $ echo $(cat f1.txt)" "$(cat f2.txt)
Bonjour les amis du cours SE2
fp2@debpacha:/tmp $ echo $(< f2.txt)
du cours SE2
fp2@debpacha:/tmp $ 

On voit déjà qu’on peut ici remplacer cat par une indirection. merci @MicP
Mais ces solutions qui reviennent à utiliser

echo $word1 $word2

pour concaténer (avec une espace) deux variables du shell (deux morceaux de phrase)) ne sont valables que si on met des double apostrophes correctement.

fp2@debpacha:/tmp $ echo "$(cat f1.txt)"    "$(cat f2.txt)"
Bonjour les amis du cours SE2

Je me permettrais de reformuler l’exercice de la manière suivante :
« Créer deux fichier f1.txt ayant comme contenu « Dedans, avec les miens, » et f2.txt ayant comme contenu « dehors en citoyen. ». Écrire un script fusion.sh qui reçoit ces deux fichiers et qui va créer un troisième fichier castex.txt ayant comme contenu la fusion des deux premiers fichiers. Le contenu de castex.txt sera alors « Dedans avec les miens, dehors en citoyen. ». Le script affichera après le contenu du fichier f3.txt. Exécuter votre script. »

Note au prof du cours SE2 : avec un bon alexandrin coupé à l’hémistiche cela a tout de suite beaucoup plus d’allure. Les noms des deux fichiers pourraient être jc1.txt et jc2.txt` (en l’honneur de Jean Castex).

Maintenant un exercice un peu plus difficile :
Créez un fichier pc1;txt contenant

Julie: - Que voulez-vous qu'il fît contre trois?

et un fichier pc2.txt contenant

Le vieil Horace: -           Qu'il mourût!
Ou qu'un beau désespoir alors le secourût.

(texte obtenu sur https://dicocitations.lemonde.fr/citations/citation-115971.php
)
Créez un script qui fusionne les deux fichiers et crée un fichier pc3.txtayant pour contenu

Julie: - Que voulez-vous qu'il fît contre trois?
Le vieil Horace: -           Qu'il mourût!
Ou qu'un beau désespoir alors le secourût.

Et à l’imparfait du subjonctif, c’est encore mieux !

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

Femme qui pète et poule qui pond ne font que bruit dans la maison.
Les proverbes philosophiques du Professeur Choron

2 J'aime

héhé
c’est sur que c’est pas beau :slight_smile:

tout à fait d’accord pour les doubles guillemets.

Perso, sur votre inspiration, j’ai fait ceci :

cat SE2.sh 

#!/bin/bash
touch f1.txt
touch f2.txt
echo Bonjour les amis > f1.txt
echo du cours SE2 > f2.txt
echo `cat f1.txt` `cat f2.txt` > f3.txt
cat -n f3.txt

Je vois qu’il manque les simple guillemet entourante les commandes deux commande cat à l’echo.

Le forum.

Pour obtenir un simple guillemet, c’est alt gr+7 espace
Il en faut 4 ici.

Voila, j’ai edité mon message pour le mettre en texte preformaté et on voit les simples guillemets.

pas guillemets, mais apostrophes (inversées).
Cette confusion apparaît souvent, serait-ce dû à l’anglais où à une épidémie?
" = guillemets de machine à écrire

'' = 2 apostrophes de machine à écrire (et `` = 2 apostrophes inverses, faciles à confondre avec le guillemet typographique ouvrant anglais, équivalent du » français).

La différence est trompeuse; il semble donc utile de ne pas aggraver la confusion avec leur désignation.

Ou plutôt : simple et doubles quotes :wink:

Quand on fait de la traduction EN→FR, c’est souvent les termes utilisés.
Et faut avouer que c’est bien plus simples à retenir. :smiley:

En effet, la meilleure façon de ne pas trahir en traduisant est…
de ne pas traduire :wink: Après tout, l’anglais s’impose en informatique, mais je ne crois pas être le seul handicapé avec cette langue qui me fait perdre mon latin. Donc merci aux traducteurs et à des choix comme celui-ci.
Il est vrai que ma remarque était d’ordre typographique et finalement peu adaptée aux graphies des langages informatiques et de ses claviers, et «simple» ou «double» évite beaucoup de confusion (reste à préciser quand le double apostrophe ne doit pas remplacer le guillemet en indiquant, par exemple, «deux simples quotes» )
Merci pour ce recentrage précis du vocabulaire vers la matière de ce forum.

1 J'aime

Bonjour

Je le comprends comme ça aussi.


Une page web permettant de voir toutes les pages de code des caractères unicodes :

https://www.utf8-chartable.de/


Dans la première colonne, le point de code unicode
Dans la deuxième colonne, le caractère affiché
Dans la troisième colonne, le nom du caractère dans la table unicode

U+0022 "   QUOTATION MARK
U+0027 '   APOSTROPHE
U+0060 `   GRAVE ACCENT
1 J'aime

Fortement probable et je vous remerci de votre message.

Bien que ce que vous appeliez guillements « de machine à écrire » soit pour moi effectivement des guillements, mais semble t - il sont des double guillemet.

Mais merci.