In this article we will put together some of the pieces from the last 2 articles, and build our first program. If you have missed the first articles, then you can catch up here before continuing with this article.

Getting Started

We are going to make our first script / program. This first program is really just setting up some building blocks for our next program we will write, that will remove the background from an image.

Creating a scripts directory

We learned in the first article how to use our terminal. Today we are going to use some of the commands we learned to create a directory where we can store our script and future scripts that we write.

Create a directory

mkdir -p ~/.local/bin

The above command will create a “hidden” directory in your home folder. We can go ahead and move into the directory we just created.

Note: The -p option allows us to create nested directories if the parent directory doesn’t exist.

cd ~/.local/bin

Hello World

It is common in programming to start out with a “Hello World” program when learning a new scripting paradigm. So let’s jump in and get started.

Creating our script file:

touch hello-world.sh

Now open the file:

open hello-world.sh

The above command should open the file in the TextEdit application. In order to make the text edit application to not auto-capitalize words and play more nicely, we need to adjust some settings. Open the settings by pressing ⌘,.

In the Format section, select Plain text and in the Options section de-select Check spelling as you type.

text-settings

At this point for changes to take place, you will need to close the file and re-open.

Tip: In your terminal you can run the last command in your history by using the (Up) arrow key.

Now that the file is open again, we will write our hello-world program. The contents of your file should look like the following:

#!/bin/sh

echo 'Hello World!'

The first line is referred to as the shebang, this tells your computer which shell interperter to run your file. I have not explained the shell yet, but it currently would just muddy the waters a bit, but there are several shell interperters on your computer with the sh posix shell being one of the most universal / lowest level ones, which is why I’m choosing this one (in other words this script would work on just about any machine you were on).

The second line we are using the built-in echo command and passing it the ‘Hello World!’ argument.

Now save and close the file ⌘s (to save) ⌘q (to quit the text edit application).

Run the program from your terminal:

/bin/sh hello-world.sh

You should see that Hello World! was printed to your console.

hello-output

Make Executable

Now that we have our basic script working, let’s make it an executable.

In your terminal, type the following:

chmod u+x hello-world.sh

This will change the mode of the file type to be an executable.

Now move / rename the file so we don’t have to call it using .sh extension:

mv hello-world.sh hello-world

Now that the file is executable, we can execute it by just calling the name of the file.

./hello-world

Note: We have to prefix the file name with ./ in the above command so that it knows where to find our file. The ./ is saying run this file in our current directory. In the future we will setup our shell so that it knows to look in our ~/.local/bin directory for scripts, so that we can call them without this prefix.

Conclusion

Congratulations, in this article we wrote our first program. We learned how to edit the file, set it’s permissions, and execute the program from our terminal. I should mention that the TextEdit application is generally not how you would program, people typically use what is known as an IDE (integrated development environment), however I chose to use the TextEdit application because it is built-in to macOS and allowed us to accomplish our goal without downloading other software.

In our upcoming articles, we will write a program that I hope is useful to you / something that you can build upon and use for a long time. Thank you for reading to this point.


Creative Commons Licence
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.