Bash is a Unix shell and command language written by Brian Fox for the GNU Project as a free software replacement for the Bourne shell. First released in 1989, it has been distributed widely as the default login shell for most Linux distributions and Apple's macOS (formerly OS X). A version is also available for Windows 10. It is also the default user shell in Solaris 11.
Bash is a command processor that typically runs in a text window where the user types commands that cause actions. Bash can also read and execute commands from a file, called a shell script. Like all Unix shells, it supports filename globbing (wildcard matching), piping, here documents, command substitution, variables, and control structures for condition-testing and iteration. The keywords, syntax and other basic features of the language are all copied from sh. Other features, e.g., history, are copied from csh and ksh. Bash is a POSIX-compliant shell, but with a number of extensions.
The shell's name is an acronym for Bourne-again shell, a pun on the name of the Bourne shell that it replaces and on the common term "born again".
During your time as an user you will use the terminal to perform tasks such as:
- Print "Hello World"
- Creating folders
- Deleting files
- Scripting
- Variables
To get started with writing Bash, open the Terminal and write your first "Hello world" Bash code:
echo "Hello World"
The command echo
display message on screen, writes each given STRING to standard output, with a space between each and a newline after the last one.
Creating folders can be done simply in the file manager nautilus by right clicking and selecting 'Create Folder', but if you want to do this from a cli environment you would type the following in the terminal:
mkdir /home/user/Desktop/new_folder
the mkdir
(make directory) command creates the folder then the file path tells it where to create the folder.
Deleting files are done with the rm
command as follows:
rm /home/user/file_to_be_deleted
The rm
(remove) command is used to remove anything through a cli environment.
NOTE: The commands given in the scripting section are to be put into the text editor and not in the terminal unless instructed otherwise.
Bash is primarily a scripting language, so it would be a crime not to talk about scripting. Let's dive straight in with a bash script. More precisely the infamous "Hello World" script. You can create a bash script by opening your favorite text editor to edit your script and then saving it (typically the .sh file extension is used for your reference, but is not necessary. In our examples, we will be using the .sh extension).
#!/bin/bash
echo "Hello, World"
The first line of the script just defines which interpreter to use. NOTE: There is no leading whitespace before #!/bin/bash. That's it, simple as that. To run a bash script you first have to have the correct file permissions. We do this with chmod command in terminal (change mode) as follows:
chmod a+x /where/i/saved/it/hello_world.sh #Gives everyone execute permissions
# OR
chmod 700 /where/i/saved/it/hello_world.sh #Gives read,write,execute permissions to the Owner
This will give the file the appropriate permissions so that it can be executed. Now open a terminal and run the script like this:
/where/i/saved/it/hello_world.sh
Now, lets get to more interesting aspects of Bash programming, Variables!
Variables basically store information. You set variables like this using text editor:
var="FOO"
'var' can be anything you want as long as it doesn't begin with a number. "FOO" can be anything you want.
To access the information from the variable you need to put a '$' in front of it like this:
var="FOO"
echo $var
Try entering those lines into a terminal one at a time; you will see that the first one just gives you another prompt and the second one prints FOO.
But that's all a bit boring. So let's make a script to ask the user for some information and then echo that information.
#!/bin/bash
clear
echo "Please enter your name"
read name
echo "Please enter your age"
read age
echo "Please enter your sex. Male/Female"
read sex
echo "So you're a $age year old $sex called $name"
read allows the user to input information where it is then stored in the variable defined after the read. read variable would take whatever input the user entered and store it in $variable
. We then access this with echo
and set up a neat sentence.