This article is a continuation of the previous article. We will be taking the previous script and using it to build on the concepts we will learning in this article.
Performing tasks conditionally
So far our script has been performing tasks uninterrupted one after the other. But often times you will come across a situation where you need to perform some checks before going ahead.
The main reason why we would want to perform checks is to make sure that certain criteria are met or if certain resources are present.
Only if these conditions are satisfied will we proceed ahead. Or take an alternative course of action incase the condition isn’t met.
We can find all these checks in the man page for the test command.
Let us look at some of those checks.
Test operations
You can run the following command to view all the operations possible.
man test
There are different comparison operations possible.
- The – followed by a letter and then the file name allows us to check for different aspects of a file. Such as if it exists, whether it is a directory and more…
- We can even compare files with each other.
- We can compare strings.
- And we can compare numbers.
Conditional code
Now that we have seen the different kinds of condition checks available. Let us explore how we can use the condition checks.
If statement
The if statement has various forms. We will look at the simplest one first.
if [[ -d "$HOME/Applications" ]]; then
echo "The applications folder exists in the home folder."
fi
If else statement
If-elif-else statement
Switch on case statement
Modify our code
We will be adding checks to make sure that the arguments passed in contain values. We will also check to see if the folders exist before trying to create them.
#!/bin/zsh
echo "$(date) Running script $0 to create folders."
TOOLS_FOLDER="Tools"
REPORTS_FOLDER="Reports"
HELP_FOLDER="Help"
if [[ $1 != "" ]]; then
TOOLS_FOLDER=$1
fi
if [[ $2 != "" ]]; then
REPORTS_FOLDER=$2
fi
if [[ $3 != "" ]]; then
HELP_FOLDER=$3
fi
TOOLS_FOLDER_CREATED=".$TOOLS_FOLDER-FolderCreated"
REPORTS_FOLDER_CREATED=".$REPORTS_FOLDER-FolderCreated"
HELP_FOLDER_CREATED=".$HELP_FOLDER-FolderCreated"
TODAY=$(date)
PATH_TO_LOG="$HOME/Library/Logs/folderCreator_log_v1-1.log"
echo "$(date) Starting" >> $PATH_TO_LOG
cd $HOME
echo "$(date) Creating folders: $TOOLS_FOLDER, $REPORTS_FOLDER, $HELP_FOLDER" >> $PATH_TO_LOG
if [[ -d $TOOLS_FOLDER ]]; then
echo "$(date) Not creating $TOOLS_FOLDER as it already exists." >> $PATH_TO_LOG
else
echo "$(date) Creating $TOOLS_FOLDER" >> $PATH_TO_LOG
mkdir $TOOLS_FOLDER
fi
if [[ -d $REPORTS_FOLDER ]]; then
echo "$(date) Not creating $REPORTS_FOLDER as it already exists." >> $PATH_TO_LOG
else
echo "$(date) Creating $REPORTS_FOLDER" >> $PATH_TO_LOG
mkdir $REPORTS_FOLDER
fi
if [[ -d $HELP_FOLDER ]]; then
echo "$(date) Not creating $HELP_FOLDER as it already exists." >> $PATH_TO_LOG
else
echo "$(date) Creating $HELP_FOLDER" >> $PATH_TO_LOG
mkdir $HELP_FOLDER
fi
echo "$(date) Creating hidden file for $TOOLS_FOLDER folder." >> $PATH_TO_LOG
cd $TOOLS_FOLDER
touch $TOOLS_FOLDER_CREATED
cd ..
echo "$(date) Creating hidden file for $REPORTS_FOLDER folder." >> $PATH_TO_LOG
cd $REPORTS_FOLDER
touch $REPORTS_FOLDER_CREATED
cd ..
echo "$(date) Creating hidden file for $HELP_FOLDER folder." >> $PATH_TO_LOG
cd $HELP_FOLDER
touch $HELP_FOLDER_CREATED
cd ..
echo "$(date) Task completed. Have a nice day!"
Your completed code should look like.
#!/bin/zsh | |
echo "$(date) Running script $0 to create folders." | |
TOOLS_FOLDER="Tools" | |
REPORTS_FOLDER="Reports" | |
HELP_FOLDER="Help" | |
if [[ $1 != "" ]]; then | |
TOOLS_FOLDER=$1 | |
fi | |
if [[ $2 != "" ]]; then | |
REPORTS_FOLDER=$2 | |
fi | |
if [[ $3 != "" ]]; then | |
HELP_FOLDER=$3 | |
fi | |
TOOLS_FOLDER_CREATED=".$TOOLS_FOLDER-FolderCreated" | |
REPORTS_FOLDER_CREATED=".$REPORTS_FOLDER-FolderCreated" | |
HELP_FOLDER_CREATED=".$HELP_FOLDER-FolderCreated" | |
TODAY=$(date) | |
PATH_TO_LOG="$HOME/Library/Logs/folderCreator_log_v1-1.log" | |
echo "$(date) Starting" >> $PATH_TO_LOG | |
cd $HOME | |
echo "$(date) Creating folders: $TOOLS_FOLDER, $REPORTS_FOLDER, $HELP_FOLDER" >> $PATH_TO_LOG | |
if [[ -d $TOOLS_FOLDER ]]; then | |
echo "$(date) Not creating $TOOLS_FOLDER as it already exists." >> $PATH_TO_LOG | |
else | |
echo "$(date) Creating $TOOLS_FOLDER" >> $PATH_TO_LOG | |
mkdir $TOOLS_FOLDER | |
fi | |
if [[ -d $REPORTS_FOLDER ]]; then | |
echo "$(date) Not creating $REPORTS_FOLDER as it already exists." >> $PATH_TO_LOG | |
else | |
echo "$(date) Creating $REPORTS_FOLDER" >> $PATH_TO_LOG | |
mkdir $REPORTS_FOLDER | |
fi | |
if [[ -d $HELP_FOLDER ]]; then | |
echo "$(date) Not creating $HELP_FOLDER as it already exists." >> $PATH_TO_LOG | |
else | |
echo "$(date) Creating $HELP_FOLDER" >> $PATH_TO_LOG | |
mkdir $HELP_FOLDER | |
fi | |
echo "$(date) Creating hidden file for $TOOLS_FOLDER folder." >> $PATH_TO_LOG | |
cd $TOOLS_FOLDER | |
touch $TOOLS_FOLDER_CREATED | |
cd .. | |
echo "$(date) Creating hidden file for $REPORTS_FOLDER folder." >> $PATH_TO_LOG | |
cd $REPORTS_FOLDER | |
touch $REPORTS_FOLDER_CREATED | |
cd .. | |
echo "$(date) Creating hidden file for $HELP_FOLDER folder." >> $PATH_TO_LOG | |
cd $HELP_FOLDER | |
touch $HELP_FOLDER_CREATED | |
cd .. | |
echo "$(date) Task completed. Have a nice day!" | |
Video
Download
You can download the completed script from here.
Pingback: Shell scripting in macOS – Part 1 | Arun Patwardhan's Blog
Pingback: Shell scripting in macOS – Part 4: Documentation and help | Arun Patwardhan's Blog
Pingback: Shell scripting in macOS – Part 5: Loops | Arun Patwardhan's Blog