Notes

Bash script to create a new Jekyll post

Edit on GitHub

Bash Scripting
3 minutes

Getting Date

1# Date
2DATE=`date +%Y-%m-%d`

This will get today’s date in YYYY-MM-DD format.

Stripping spaces and replacing with underscores

1$ str="This is just a test"
2$ echo ${str// /_}
3This_is_just_a_test

Taking it Further

Make it a function

What’s cooler than a bash script? A bash function! With a function, we don’t have to specify script name/location every time. A bash function added to your .bash_profile will work globally anywhere in the Terminal. The command to run would then become like this:

1jpost "My new post"

To make the script a function, all you have to do is wrap the code in functionname() { } like so:

1jpost() {
2    # code goes here
3}

Take options

It’s be nice if you could define options for your script and specify them at runtime. Like -t for Type and -l for Layout. Maybe a -o for Opening file in Sublime Text after it has been created.

So the command would become something like this:

1jpost -t=markdown -l=post -o "My new post" 

We can do this with the bash builtin getopts. Define our options like so:

1while getopts "o" opt; do
2    case $opt in
3        o) open=1 ;;
4    esac
5done

And then modify our if statements accordingly. For example, if -o is provided, open the file in Sublime Text

1# check for -o (open) argument
2if [ ! -z $open ]; then
3    createPost
4    # Open file in Sublime Text
5    open -a "Sublime Text" $FILEPATH
6fi

Check if File already exists

A simple if statement can make sure that you are not overwriting existing files.

1if (-e $FILENAME ); then
2    echo "File already exists!"
3else
4    // Run our code
5fi

-e is the operator that checks if a file exists. -s is the operator that checks if file exists and is not empty.

Color coded responses

A simple success or error message about the results of our command would be nice. What would be even nicer if they were red or green based on their run status.

I want it to say “File has been successfully created” (green text) when a file has been cerated without any errors. If a file already exists, it should say “File already exists!” (red text).

Let’d define some colors and use them in our script.

1# COLORS
2Color_Off='\033[0m'       # Text Reset
3Red='\033[0;31m'          # Red
4Green='\033[0;32m'        # Green
5Yellow='\033[0;33m'       # Yellow
6
7echo -e "${Green}File was succesfully CREATED${Color_Off}"
8echo -e "${Red}File already EXISTS and is NOT EMPTY${Color_Off}"
9echo -e "${Yellow}File already EXISTS${Color_Off}"

Open the newly created file in editor

If you’d like to open all new files in your favorite editor after they are created, you can add that too. The following is what i have to open all post files in Sublime Text:

1open -a "Sublime Text" $FILEPATH

You should add this right after the file is created in your code.