Notes on Codecademy "Learn Bash Scripting"
After a frustrating time with Codecademy's "Learn Sass" practice projects, I poked around the course catalog for something quick and easy to go through. I saw the "Learn Bash Scripting" course which had just a one-hour estimate for time commitment. Less than an hour later, I can say it met expectations: it was quick and easy covering a few basic things, leaving plenty more for me to learn on my own if I wanted to.
Technically speaking I've already been making shell scripts to automate a few repetitive tasks, but they have all just been lists of commands I would have typed at the command line. Maybe an echo
or two to emit text, but no more. If I had needed to automate something that required decision-making logic, I used to go to something like Python. Which works but rather heavyweight if all I wanted was, say, a single if
statement in reaction to a single user input. I could have done that with a shell script.
And after taking this course, I know how. One of the first things we saw was if/then/else/fi
. There is a limited set of logical operators available, along with warnings that spaces are consequential. (One extra space or one missing space become syntax errors.) Getting user input from a read
is straightforward, though parsing the resulting string and error-handling weren't covered. We also got to see loop commands for
, until
, and while
. What we did not cover in this course were how to define functions to be called elsewhere in the script in order to reduce repetition. That was the only thing I wished the course covered. If I wanted to do anything more sophisticated that the above, I would likely go to Python as I used to do.
The practice project associated with this course was touted as a "build script" but it's not a makefile
, just a series of copy commands interspersed with a bit of logic. I was a little annoyed it assumed we knew command line tools not covered in class, like head
and read
, but I've learned about them now and I could add them to my command-line toolbox.