Bish bosh bash. Why do lots of boring tasks when they could be automated? Bash something out instead.
A lot of Linux scripts are written in Bash, and an understanding of it helps in other areas, such as piping (|) and outputting (>) in npm scripts.
Using the built in commands as covered in terminal velocity we can start to pull sequences of commands together in one nice little script. It can be more than running sequentially through commands; you can use it with variables, getting user input, loops, sub scripts et al.
A great thing about bash scripts is that they don't have to be compiled, it is right there part of the OS.
To enter bash type
bash in the terminal. You'll see something like
Then you can run commands directly with bash:
echo hello world
Bash is more useful in a script. Create a file (vim hello) add
echo hello world and save as 'hello' (no file extension). Navigate to the directory and run:
bash hello hello world
Unix has a standard i/o (input output) model consisting of:
- standard input
- standard output
- standard error
Input could be a mouse or something else but it defaults to keyboard. Output could be a printer or something else but it defaults to a console/screen/monitor. Error is like output, it defaults to console/screen/monitor.
These are also streams, and like streams they can be channelled and redirected. To redirect output into a file (using standard output
ls -la > listoutputfile.txt
If there is an error, you can write out the error to a file using the standard error output
ls -la not.here 2> lserror.txt
I used to use the > when backing up a MySQL database without really understanding what it was:
mysqldump --opt -u root -p mydatabase > mbackupfile.sql
To redirect output as input to another script use the pipe
|. For example, to get a list of files (recursive) in a directory you can use
find and then pipe it into
wc which stands for word count:
find . -type f | wc -l
The easiest way to run your script is to run from it's directory using the bash command:
If you want your script to be available on your system, you can either add it to the $PATH or you can move it to
To turn your script into an executable run:
chmod +x myscript
And run it with:
More on Unix permissions can be found at linuxcommand.org.
If you try to run it with just
myscript you will get a 'command not found' error. This is because bash will look in the
/usr/local/bin for the executable, hence we have to explicitly say that the script is here.
If you edit your .bashrc file and you want to apply those changes without logging off and back on again just run:
Bash scripting is really powerful. Definitely worth investing some time in it.