2011-07-22 20:18:22 +0000 2011-07-22 20:18:22 +0000
25
25

Shell script echo nouvelle ligne au fichier

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

var1="Hello" var2="World!" logwrite="$var1 [Here's where I want to insert a new line] $var2 echo "$logwrite" \>\> /Users/username/Desktop/user.txt

En ce moment, lorsque j'exécute mon script, le fichier user.txt affiche ceci :

Hello World!

Je veux qu'il s'affiche :

Hello World!

Comment faire ?

EDIT : Voici mon script shell :

echo -n "What is your first name? " read first echo -n "What is your last name? " read last echo -n "What is your middle name? " read middle echo -n "What is your birthday? " read birthday echo -e "First Name: $first /nLast Name: $last /nMiddle Name: $middle /nBirthday: $birthday" \>\> /Users/matthewdavies/Desktop/user.txt qlmanage -p "~/Desktop/user.txt"

Réponses (2)

32
32
32
2011-07-22 20:20:04 +0000
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. Le passage de l'argument -e à echo permet l'interprétation des 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
5
5
5
2011-07-22 20:35:53 +0000
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 la réponse de john t : si l'un des vars avait la chaîne (ou une autre séquence comme \t) ils seront traduits. 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, surtout si vous avez beaucoup de lignes à ajouter au log :

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

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

attention à ce que l'heredoc développe $variables, comme des guillemets doubles. si vous ne voulez pas cela, vous citez l'heredoc, comme << “EOF”