Builtin shell variables are predefined and are global variables that we can use in our script at any point of time. These are reserved shell variables and some of them may have a default value assigned by bash
. Some variables' value will depend upon your current shell environment setup. The different type of shell may have a few specific reserved variables to it. All builtin shell variables' name will be in uppercase.
A few reserved shell variables available in bash
shell are as follows:
More shell variables can be found in man bash
.
We will see what values these shell variables contain by printing its value in a shell script:
#!/bin/bash #Filename: builtin_shell_variables.sh #Description: Knowing about builtin shell variables echo "My current bash path - $BASH" echo "Bash version I am using - $BASH_VERSION" echo "PID of bash I am running - $BASHPID" echo "My home directory - $HOME" echo "Where am I currently? - $PWD" echo "My hostname - $HOSTNAME"
After running this script, the output may vary depending upon what the value of these variables is set in your system. The sample output will be as follows:
My current bash path - /bin/sh Bash version I am using – 4.3.33(1)-release PID of bash I am running - 4549 My home directory - /home/sinny Where am I currently? - /home/sinny/Documents/ My hostname – localhost.localdomain
The shell variables, such as PWD
, PATH
, HOME
, and so on, are very useful and help in getting the information quickly by just echoing a value in it. We can also add or modify the value of some of shell variables, such as PATH
, in order to add a custom path in which we want shell to look for commands.
One of the use-cases of modifying the PATH
variable value is: suppose, I have compiled a source code that generates a few binaries such as, foo
and bar
. Now, if I want shell to search in that particular directory for command as well, then add this directory path in the PATH
variable and we are done. The following small shell script example shows how to do this:
#!/bin/bash #Filename: path_variable.sh #Description: Playing with PATH variable echo "Current PATH variable content - $PATH" echo "Current directory - $PWD" echo "Content of current directory `ls`" PATH=$PATH:$PWD echo "New PATH variable content - $PATH" # Now execute commands available in current working diectory
The output after running this script will be somewhat as follows:
Current PATH variable content - /usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/home/sinny/go/source_code/go/bin:/home/sinny/.local/bin:/home/sinny/bin Current directory - /home/sinny/test_project/bin Content of current directory – foo bar New PATH variable content - /usr/lib64/qt-/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/home/sinny/go/source_code/go/bin:/home/sinny/.local/bin:/home/sinny/bin: /home/sinny/test_project/bin
We see from the output that a new PATH
variable has my custom path added. From the next time, whenever I run the foo
or bar
commands with this custom PATH
variable set, the absolute path of the foo
and the bar
command/binary won't be required. Shell will find out these variables by looking into its PATH
variable. This is true only during the current session of shell. We will see this in Chapter 5, Customizing Environment in recipe, Modifying a shell environment.
18.224.58.33