it-swarm.com.de

Shell-Skript gibt neue Zeile in Datei aus

Ich möchte eine neue Zeile in eine Datei zwischen Variablen in einem Shell-Skript einfügen. Hier ist mein Code:

 var1 = "Hallo" 
 var2 = "Welt!" 
 logwrite = "$ var1 [Hier möchte ich eine neue Zeile einfügen] $ var2 
 echo "$ logwrite" >> /Users/username/Desktop/user.txt

Im Moment, wenn ich mein Skript ausführe, zeigt die Datei user.txt Folgendes:

Hallo Welt!

Ich möchte, dass es zeigt:

Hallo Welt!

Wie mache ich das??

EDIT: Hier ist mein Shell-Skript:

 echo -n "Wie lautet Ihr Vorname?" 
 read first 
 echo -n "Wie lautet Ihr Nachname?" 
 read last 
 echo -n "Wie lautet Ihr zweiter Vorname?" 
 read middle 
 echo -n "Was ist Ihr Geburtstag?" 
 read birthday 
 echo -e " Vorname: $ first/nLast Name: $ last/nMiddle Name: $ middle/nGeburtstag: $ birthday ">> /Users/matthewdavies/Desktop/user.txt[.____.owntownqlmanage -p" ~/Desktop/user. TXT"
23
daviesgeek
var1="Hello"
var2="World!"
logwrite="$var1\n$var2"
echo -e "$logwrite"  >> /Users/username/Desktop/user.txt

Erklärung:

Die Escape-Sequenz \n gibt einen Zeilenvorschub an. Die Übergabe des Arguments -e an echo ermöglicht die Interpretation von Escape-Sequenzen.

Es kann sogar noch weiter vereinfacht werden:

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

oder auch:

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

oder eigentlich brauchst du keine vars:

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

es gibt ein problem mit der antwort von john t: wenn einer der vars den string\n (oder eine andere folge wie\t) hatte, werden sie übersetzt. man kann etwas ähnliches wie seine Antwort mit printf bekommen:

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

auch hmm. Ich sehe, dass Sie die Antwort in eine Variable $ logwrite komponieren. Wenn dies die einzige Verwendung dieser Variablen ist, erscheint sie sinnlos.

Ich denke, ein Here-Doc könnte besser lesbar sein, besonders wenn Sie viele Zeilen an das Protokoll anhängen müssen:

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

(Dieses Wort, EOF, ist ein Trennzeichen, das Sie auswählen können. Es kann ein beliebiges Wort sein.).

beachten Sie, dass der Heredoc $ -Variablen wie doppelte Anführungszeichen erweitert. wenn du das nicht willst, zitierst du den Heredoc, wie << "EOF"

5
elias