Even though BASH is not a typed language like another programming language, it provides different ways to create variables. Variables in Bash scripts can only contain String or numerical values.
my_name='Nitendra' |
There are some rules when creating the Bash variables.
- Shell script name starts with an underscore or an Alphabet.
- The bash script is case-sensitive. It means
my_name
andMY_NAME
are two different variables.
Types of Bash Variables
There are mainly three types of variables in a Bash script that we can use.
- Local variables
- Environment variables
- Positional Parameters Variable.
Local Variables
This variable exists throughout the session of the script and is not accessible outside of that particular script. It can be declared using equals = sign can be retrieved using dollar $ sign. When you declare a variable in a shell script, you should not have a space between the variable name, =
and the value.
Let’s create the shell script with the below local variable.
blog_name= "nitendratech" #Declaring the Variable with the value echo $blog_name #Display the value of that variable using echo and `$` sign unset blog_name # Deleting the variable after use |
When the above piece of code runs, we will see the below value.
~ % blog_name= "nitendratech" ~ % echo $blog_name nitendratech ~ % unset blog_name |
Instead of this, we can use the local keyword to declare the variable. The main advantage of doing this is that the variable disappears when the function exits.
local blog_name_local= "nitendratech" |
Environment Variables
Environment variables are accessible to any program or script running the current Shell session. They are global settings that control Shell’s function as well as other Linux-based commands. They are created using the export keyword when declaring in the shell script. Depending upon your flavors of Linux you might have a file called .bashrc
or .zshrc
in your home location. It will have a list of environment variables that are available in that Linux session.
For Example, the MySql home path is set up in the below location.
cat ~/.zshrc #Mysql home export MYSQL_HOME= /usr/local/mysql export PATH=$PATH:$MYSQL_HOME /bin |
So if I use the echo command of Mysql home from a bash script or a terminal, I will be able to get the value of this variable.
~ % echo $MYSQL_HOME /usr/local/mysql |
There are many environment variables in bash that are already defined. Below are some of the common parameters that you can use after adding a dollar $
sign.
Variable | Description |
HOME | Current users Home directory. The value of this variable is the same one when using tilde ~ expansion. |
PWD | Current/Present working directory |
RANDOM | Generates a Random number between 0 and 32767 |
PATH | A list of a colon-separated list of Application Paths from the current Shell session |
UID | The numeric, Real ID of the current user |
Positional Parameters Variables
These variables are allocated when a function is evaluated and are given positionally. When we pass parameters to a shell script, the value of those parameters is read as a positional Variable.
sh positionalVariablesEx.sh param1 param2 param3 param3 |
The following tables give a list of positional parameters and other variables which have their special meaning when used inside of Bash script function.
Parameter | Description |
$0 | Current Scripts Name |
$# | Number of Parameters Passed not counting $0 |
$1 ... $9 | Parameter List Elements from 1 to 9 |
$* or $@ | All Positional Parameters except $0 |
You can check the below command to run this script.
~ % chmod 754 bash_variables_example.sh ~ % sh bash_variables_example.sh 1 2 3 4 5 Number of Parameters Passed 5 Current Script Name bash_variables_example.sh All Positiona Parameters Exccept Zero 1 2 3 4 5 All Positiona Parameters Exccept Zero 1 2 3 4 5 FIve Input Parameters 1 2 3 4 5 Printing from print_param function first_param 1 second_param 2 third_param 3 fourth_param 4 fifth_param 5 Unsetting the Fifth Parameters Printing Global Variables Home Directory /Users/nitendragautam Preset Working Directory /Users/nitendragautam/github_projects/devops_scripting/bash Random Number 16654 Displaying Path /Library/Frameworks/Python .framework /Versions/3 .7 /bin : /usr/local/bin : /usr/bin : /bin : /usr/sbin : /sbin : /Applications/VMware Fusion.app /Contents/Public |