That is known as a "Here Tag". Basically it tells the shell that you are going to enter a multi-line string until "Here". You could call it anything you want, not just EOF or STOP.
Code:
[mb@ironmaiden mb]$ cat > test <<HERE
> Hello
> world
> HERE
The <<HERE part tells the shell that you're going to enter multi-lines until the HERE tag. Thus the shell waits until it sees HERE to consider the rest of the stuff above it as input for cat.
Some rules about the Here tags:
1. The tag can be any string, uppercase or lowercase, though most people use uppercase by convention.
2. The tag will not be considered as a Here tag if there are other words in that line. In this case, it will merely be considered part of the string. The tag should be by itself on a separate line, to be considered a tag.
3. The tag should have no leading or trailing spaces in that line to be considered a tag. Otherwise it will be considered as part of the string.
Here's another chunk to consider:
Code:
[mb@ironmaiden mb]$ cat >> test <<HERE
> Hello world HERE <--- Not the end of string
> This is a test
> HERE <-- Leading space, so not end of string
> and a new line
> HERE <-- Now we have the end of the string
Note that in the above, we have the word HERE showing up 3 times. The first two times, it occurs with other words or leading spaces and hence it is considered as part of the string.
Many scripting languages (perl, PHP, awk, ruby etc.) support the concept of the "Here tag", so it isn't unique to bash alone.