Create text file and fill it using bash

BashUnix

Bash Problem Overview


I need to create a text file (unless it already exists) and write a new line to the file all using bash.

I'm sure it's simple, but could anyone explain this to me?

Bash Solutions


Solution 1 - Bash

Creating a text file in unix can be done through a text editor (vim, emacs, gedit, etc). But what you want might be something like this

echo "insert text here" > myfile.txt

That will put the text 'insert text here' into a file myfile.txt. To verify that this worked use the command 'cat'.

cat myfile.txt

If you want to append to a file use this

echo "append this text" >> myfile.txt

Solution 2 - Bash

If you're wanting this as a script, the following Bash script should do what you want (plus tell you when the file already exists):

#!/bin/bash
if [ -e $1 ]; then
  echo "File $1 already exists!"
else
  echo >> $1
fi

If you don't want the "already exists" message, you can use:

#!/bin/bash
if [ ! -e $1 ]; then
  echo >> $1
fi

Edit about using:

Save whichever version with a name you like, let's say "create_file" (quotes mine, you don't want them in the file name). Then, to make the file executatble, at a command prompt do:

chmod u+x create_file

Put the file in a directory in your path, then use it with:

create_file NAME_OF_NEW_FILE

The $1 is a special shell variable which takes the first argument on the command line after the program name; i.e. $1 will pick up NAME_OF_NEW_FILE in the above usage example.

Solution 3 - Bash

Assuming you mean UNIX shell commands, just run

echo >> file.txt

echo prints a newline, and the >> tells the shell to append that newline to the file, creating if it doesn't already exist.

In order to properly answer the question, though, I'd need to know what you would want to happen if the file already does exist. If you wanted to replace its current contents with the newline, for example, you would use

echo > file.txt

EDIT: and in response to Justin's comment, if you want to add the newline only if the file didn't already exist, you can do

test -e file.txt || echo > file.txt

At least that works in Bash, I'm not sure if it also does in other shells.

Solution 4 - Bash

#!/bin/bash
file_location=/home/test/$1.json
if [ -e $policy ]; then
  echo "File $1.json already exists!"
else
  cat > $file_location <<EOF
{
      "contact": {
          "name": "xyz",
          "phonenumber":   "xxx-xxx-xxxx"
      }
    }
EOF
fi

This code checks if the given JSON file of the user is present in test home directory or not. If it's not present it will create it with the content. You can modify the file location and content according to your needs.

Solution 5 - Bash

Your question is a a bit vague. This is a shell command that does what I think you want to do:

echo >> name_of_file

Solution 6 - Bash

cat my_file.txt | cat > new_file.txt

Create a ".sh" file and drop this command there, then run))

This will put the output of my_file to new_file and by the way will create it.

Instead of cat my_file.txt you can put any text, it automatically will be send to new_file.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionswitzView Question on Stackoverflow
Solution 1 - Bashostler.cView Answer on Stackoverflow
Solution 2 - BashGreenMattView Answer on Stackoverflow
Solution 3 - BashDavid ZView Answer on Stackoverflow
Solution 4 - BashMohView Answer on Stackoverflow
Solution 5 - BashzwolView Answer on Stackoverflow
Solution 6 - BashVeaceslavView Answer on Stackoverflow