What Are Built-in Variables in Bash? [2 Cases With Examples]

LINUX
FUNDAMENTALS
A Complete Guide for Beginners Enroll Course Now

Built-in variables undeniably play an integral part in the field of interactive Bash scripting. These variables provide critical information about the shell’s configuration and behavior which is enough to call them powerful tools in Bash. By leveraging the variables, a user can write more robust and efficient Bash scripts. So, let’s go through the article to get more ideas about the Bash built-in variables with several cases and examples.

Key Takeaways

  • Learning about various built-in variables in Bash.
  • Utilizing Bash built-in variables for multiple cases.

Free Downloads

What Are Built-in Variables in Bash?

Built-in variables refer to the predefined and default variable types that Bash uses to store various information. These variables provide crucial data for customizing and controlling the behavior of the Bash. Without arranging any additional setup, you can easily access these built-in variables and make scripting decisions quickly.

Some Commonly Used Built-in Variables in Bash

There are various built-in variables in Bash having different meanings based on different contexts. Here are some commonly used built-in variables lists in Bash:

Syntax Description
$BASH The path to the Bash.
$BASH_VERSION The version number of the Bash shell.
$HOME The home directory of the current user.
$PWD The present working directory of the current user.
$OLDPWD The previous working directory of the current user.
$SHELL The path to the default shell.
$USER The username of the current user.
$UID The user ID number of the current user.
$HOSTNAME The current host system name.
$HOSTTYPE The current host system type.
$LINENO Holds the current line number.
$IFS Splits input into separate words.
$$ The process ID of the current shell.
$0 The name of the executing script.
$# The number of positional parameters passed to the script.
$@ All positional parameters as separate strings.
$* All positional parameters as a single string.
$? The exit status of the last executed command.

2 Cases for Built-in Variables in Bash

Built-in variables are so flexible that you can simply append them to a conditional statement or modify the value. In the following section, I’m going to share two such cases of Bash built-in variables:

Case 1: Bash Built-in Variables in Case of Conditional Statements

You can use Bash built-in variables in a conditional statement to create a directory by following the steps below:

Steps to Follow >

➊ Open your Ubuntu Terminal.

➋ To open a script in the nano text editor, write the command below:

nano conditional.sh

EXPLANATION
  • nano: A text editor.
  • conditional.sh: This is a script. Here, I have named the script by ‘conditional.sh’. You can name any of your choices.

Opening the script in Nano editor

➌ Hereafter, write the following script inside the editor:

Script (conditional.sh) >

#!/bin/bash

#Attempting to create a directory
mkdir var_dir

if [ $? -eq 0 ]; then
   echo "Directory created."
else
   echo "Failed to create directory."
fi
EXPLANATION

Here, in #!/bin/bash, ‘#!’ is called ‘Shebang’ or ‘Hashbang’. ‘mkdir var_dir’ attempts to create the directory ‘var_dir’. Now, in ‘if [ $? -eq 0 ]; then, the ‘$?’ holds the exit status of the last executed command ‘mkdir’. Then, if the exit status is 0, it indicates success, and the echo command will print “Directory created.”. If the exit status is non-zero, it indicates failure, and in the else block, the echo command will print “Failed to create directory.”.

➍ Then, press CTRL+S to save the file & press CTRL+X to exit.

➎ After that, use the command below to make the script executable:

chmod u+x conditional.sh
EXPLANATION
  • chmod: Changes the permission of the files and directories.
  • u+x: Adds the executable permission for the user.
  • conditional.sh: The file which you want to make executable.

Adding executable permission to the script

➏ Finally, run the script by the following command:

./conditional.sh

New directory created

From the above image, you can see that I have created a new directory.

Case 2: Bash Built-in Variables in Case of Modification Purpose

You can easily modify the built-in variable “$IFS” in Bash, and alter the word-splitting behavior.

You can follow the steps of Case 01, to save & make the script executable.

Script (modify.sh) >

#!/bin/bash

#Saving the current values of IFS
main_ifs="$IFS"

#Customizing the IFS to use commas as the delimiter
IFS=","

#Creating a string separated with comma
painting="canvas,color,brush"

#Splitting the string into an array using the modified IFS
read -ra elements <<< "$painting"

#Displaying the array elements
echo "First element: ${elements[0]}"
echo "Second element: ${elements[1]}"
echo "Third element: ${elements[2]}"

#Restoring the main IFS
IFS="$main_ifs"
EXPLANATION

Here, I have saved the actual value of ‘$IFS’ in the ‘main_ifs’, and modified ‘$IFS’ to use a comma (,) as the delimiter. Next, in the line ‘painting=”canvas,color,brush”‘, I have created a string called ’painting’ which is separated by commas. Hereafter, in ‘read -ra elements <<< “$painting”‘, I have used the modified ‘$IFS’ to split the string into an array called ‘elements’. Finally, the echo commands display the elements of the array and the actual value of ‘$IFS’ is stored to prevent unexpected behavior of the script.

Now, run the following script by the command below:

./modify.sh

Output as array elements by modifying the variable '$IFS'

The above snapshot displays the array elements done by modifying the variable ‘$IFS’.

3 Examples of Bash Built-in Variables for Script Control

Certainly, Bash built-in variables are very useful for script control purposes. Let’s go through some script control examples of built-in variables in Bash:

Example 1: Using Built-in Variables in Bash for Checking Command Status

By using the built-in variable ‘$?’, you can easily check the command status in a Bash script. Though sometimes it doesn’t work visibly in the code, it performs its task implicitly in the conditional statements.

You can follow the steps of Case 01, to save & make the script executable.

Script (command-status.sh) >

#!/bin/bash

# Checking a file’s existence
file="new.txt"
if [ -f "$file" ]; then
   echo "File '$file' exists."
else
   echo "File '$file' does not exist."
fi
EXPLANATION

Here, in ‘if [ -f “$file” ]; then’, the ‘-f’ test operator checks if ‘new.txt’ exists in the ‘$file’ variable. The ‘[ ]’ command evaluates the return values of the condition. If the condition is true, then the echo command prints “File ‘$file’ exists.”. Or if the condition is false, then the echo command prints “File ‘$file’ does not exist.”.

The ‘$?’ variable is not apparently used in the code. But it contributes by holding the exit status or return values of the ‘[ ]’ command.

Now, run the script by the following command:

./command-status.sh

Displaying the output of command status

From the image, you can see that the mentioned file does not exist.

Example 2: Using Built-in Variables in Bash for Checking the Number of Arguments

You can use the built-in variable ‘$#’ to define the number of arguments passed to a script and handle various cases under the conditional statements.

You can follow the steps of Case 01, to save & make the script executable.

Script (argument.sh) >

#!/bin/bash

#Checking how many arguments are there
if [ $# -eq 0 ]; then
echo "No arguments provided."
elif [ $# -eq 1 ]; then
echo "One argument provided: $1"
else
echo "Multiple arguments provided: $@"
fi
EXPLANATION

Here, the special variable ‘$#’ inside the if condition contains the number of arguments (excluding the script name). First, the line ‘if [ $# -eq 0 ]; then’ checks if the number of arguments is equal to 0. If there are no arguments, the condition becomes true, and the echo command prints “No arguments provided.”

When any arguments are passed to the script, the first condition becomes false, and the line ‘elif [ $# -eq 1 ]; then’ checks if the number of arguments is equal to 1. If there is one argument, then the script executes the line echo “One argument provided: $1” where the first argument is stored in ‘$1’.

If all the previous conditions are false, the script proceeds to the else block. When there is more than one argument passed to the script, the echo command prints “Multiple arguments provided: $@”. Here, the special variable ‘$@’ resembles all the parameters as separated by spaces.

Now, run the following script by the command below:

Scenario 1 >

./argument.sh

Output showing no argument is provided

In scenario 1, you can see that I have used no arguments while running the script ‘argument.sh’. So, the output tells that no arguments are provided.

Scenario 2 >

./argument.sh hello

Output showing one argument is provided for built-in variables

In scenario 2, I have run the script with an argument ‘hello’. That’s why the output shows the one argument that is provided during the script execution.

Scenario 3 >

./argument.sh hello Bash

Output showing multiple arguments are provided for built-in variables

In scenario 3, I have run the script with two arguments ‘hello’, and ‘Bash’. So, the output displays the multiple arguments provided with the script execution.

Example 3: Using Built-in Variables in Bash for Debugging

You can use the ‘$LINENO’ variable for debugging and finding the line number of the executed commands. This will help you to troubleshoot the errors of a Bash script.

You can follow the steps of Case 01, to save & make the script executable.

Script (variable-debug.sh) >

#!/bin/bash

#Debugging
function debug_func() {
    echo "debug_func is being executed at line number: $LINENO"
}

echo "This is line number: $LINENO"

debug_func

echo "This is line number: $LINENO"

echo "Error occurs here.."
echo "This is line number: $LINENO"

# More code..
echo "End of the script at line number: $LINENO"
EXPLANATION

The line ‘function debug_func() {‘ defines the function named ‘debug_func’ and the echo command inside the function prints the current line number where the function is executed by using the ‘$LINENO’ variable. Then, the line echo “This is line number: $LINENO” prints the current line number where the echo command is executed.

Now, the line ‘debug_func’ indicates the predefined function call. Then, it executes the echo command that prints the line number where the echo command is executed in the function. After that, the line echo “This is line number: $LINENO” prints the current line number after the debug_func function calling.

Hereafter, the line echo “Error occurs here..” dictates that some errors might occur at this moment. And the line echo “This is line number: $LINENO” again prints the current line number here. Next, you can add more code in the ‘# More code..’ section. Finally, echo “End of the script at line number: $LINENO” prints the current line number at the end of the script.

Now, run the following script by the command below:

./variable-debug.sh

The output of the debugging process of built-in variables

The above image demonstrates how the ‘$LINENO’ variable helps to debug by keeping track of command executions and unexpected errors.

Conclusion

Throughout the article, I have outlined how one can execute Bash built-in variables practically and how these variables can help you to control the shell’s environment. However, to wrap up, use these readily available variables in an explicit way for illustrating adaptable and user-friendly scripts.

People Also Ask

How to access the value of a built-in variable?
You can access the value of a built-in variable by prefixing it with ‘$’. For example, you have to write ‘$USER’ to access the value of the variable ‘USER’.

Are built-in variables case-sensitive in Bash?
Built-in variables are case-sensitive in Bash. For instance, ‘$home’ and ‘$HOME’ variables are totally different.

Can I modify a built-in variable’s value?
You cannot modify all variables. You can modify the read-only variables like ‘$UID’, ‘$HOME’. But the variable like ‘$IFS’ can be modified for shell customization.

Can I delete any built-in variable from Bash?
As built-in variables are part of the Bash internal environment, you cannot delete or undefine any built-in variable from Bash.

Related Articles


<< Go Back to Types of Variables in Bash | Bash Variables | Bash Scripting Tutorial

Rate this post
Nadiba Rahman

Hello, This is Nadiba Rahman, currently working as a Linux Content Developer Executive at SOFTEKO. I have completed my graduation with a bachelor’s degree in Electronics & Telecommunication Engineering from Rajshahi University of Engineering & Technology (RUET).I am quite passionate about crafting. I really adore exploring and learning new things which always helps me to think transparently. And this curiosity led me to pursue knowledge about Linux. My goal is to portray Linux-based practical problems and share them with you. Read Full Bio

Leave a Comment