web-dev-qa-db-fra.com

Le script shell renvoie la nouvelle ligne au fichier

Je veux faire écho d'une nouvelle ligne à un fichier entre les variables dans un script Shell. Voici mon code:

 var1 = "Bonjour" 
 var2 = "Monde!" 
 logwrite = "$ var1 [Voici où je veux insérer une nouvelle ligne] $ var2 
 echo "$ logwrite" >> /Users/username/Desktop/user.txt

À l'heure actuelle, lorsque j'exécute mon script, le fichier user.txt indique ceci:

Bonjour le monde!

Je veux le montrer:

Bonjour le monde!

Comment puis-je faire cela??

EDIT: Voici mon script Shell:

 echo -n "Quel est votre prénom?" 
 à lire en premier 
 echo -n "Quel est votre nom de famille?" 
 à lire en dernier 
 echo -n "Quel est votre deuxième prénom?" 
 lire au milieu 
 echo -n "Quelle est votre date de naissance?" 
 lire un anniversaire 
 echo -e " Prénom: $ first/nLast Nom: $ last/nNom moyen: $ middle/nAnniversaire: $ birthday ">> /Users/matthewdavies/Desktop/user.txt
qlmanage -p" ~/Desktop/user. SMS"
23
daviesgeek
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt

Explication:

La séquence d'échappement \n indique un saut de ligne. Passer l'argument -e à echo permet d'interpréter les séquences d'échappement.

Il peut même être simplifié davantage:

var1="Hello"
var2="World!"
echo -e "$var1\n$var2"  >> /Users/username/Desktop/user.txt

ou même:

echo -e "Hello\nWorld! "  >> /Users/username/Desktop/user.txt
30
John T
var1='Hello'
var2='World!'
echo "$var1" >> /Users/username/Desktop/user.txt
echo "$var2" >> /Users/username/Desktop/user.txt

ou en fait vous n'avez pas besoin de vars:

echo 'Hello' >> /Users/username/Desktop/user.txt
echo 'World!' >> /Users/username/Desktop/user.txt

il y a un problème avec john t answer: si un des vars avait la chaîne\n (ou une autre séquence comme\t), il sera traduit. on peut obtenir quelque chose de similaire à sa réponse avec printf:

printf '%s\n%s\n' 'Hello' 'World!'

aussi hmm. Je vois que vous composez la réponse dans une variable $ logwrite. si c'est la seule utilisation de cette variable, cela semble inutile.

Je pense qu'un here-doc pourrait être plus lisible, spécialement si vous avez beaucoup de lignes à ajouter au journal:

cat >> /Users/username/Desktop/user.txt <<EOF
Hello
World
EOF

(Ce mot, EOF, est un délimiteur que vous pouvez choisir. Ce peut être n'importe quel mot).

méfiez-vous que l'heredoc développera $ variables, comme les guillemets doubles. si vous ne le souhaitez pas, vous citez l'heredoc, comme << "EOF"

5
elias