How to append multiple lines to a file with bash

I am writing a bash script to look for a file if it doesn't exist then create it and append this to it:

Host localhost
ForwardAgent yes


So "line then new line 'tab' then text" I think its a sensitive format. I know you can do this:

cat temp.txt >> data.txt


But it seems weird since its two lines. Is there a way to append that in this format:

echo "hello" >> greetings.txt

-

printf '%s\n    %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt


Or, if it's a literal tab that you want (rather than the four spaces in your question):

printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt


You can achieve the same effect with echo, but exactly how varies from implementation to implementation, whereas printf is constant.

-
thanks man i haven't even heard of printf before ill read up on that! –  TheLegend May 27 '13 at 15:00
With the gnu coreutils echo will be: echo -e "Host localhost\n\tForwardAgent yes" >> file.txt. -e will enable the interpretation of backslashes ;) –  nwildner Jul 30 '14 at 17:01
this doesn't work. %s means - literally interpreted string argument. –  mikeserv Sep 5 '14 at 20:29
You can use \n for newline in your format argument (where you have '%s'), but not in the rest. So your answer doesn't work. And putting it in the format argument instead gives issues with %. –  derobert Sep 5 '14 at 20:38
# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt

# possibility 2:
echo "line 1
line 2" >> greetings.txt

# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT

-
thanks Hauke Laging! possibility 3 is what i was looking for. sorry that its a silly question –  TheLegend May 27 '13 at 14:57
You got two good answers. You should mark the answer you really like as accepted. –  unxnut May 27 '13 at 15:00
@TheLegend That is called a "here document". Have a look at that paragraph in the man page. –  Hauke Laging May 27 '13 at 15:00
One more possibility is ( echo "line 1" ; echo "line 2" ) >>greetings.txt. –  ott-- May 27 '13 at 15:38
@ott-- You don't need a real subshell (i.e. can save one new process), this is enough: { echo "line 1" ; echo "line 2"; } >>greetings.txt –  Hauke Laging May 27 '13 at 16:10
echo -e "Hello \nWorld \n" >> greetings.txt

-