Linux Environment Variables
Linux

Learn Linux Environment Variables Step-By-Step Easy Guide

In the previous posts, we talked about some of the basic Linux commands, today we continue our journey, and we will talk about something very important in Linux which is Linux Environment Variables.

So what are Environment Variables and what is the benefit of knowing them?

Well, the bash shell uses a feature called Environment Variables to store some values which are required by the running programs or scripts from that shell, actually, this is a very handy way to store data and make it available for any script or a program when you run it from the shell.

There are two types of environment variables in the bash shell:

  • Global variables
  • Local variables

Global variables are visible from the shell session and for any running process that runs from the shell.

Local variables are visible in the shell that creates them.

Global variables

The Linux system sets several global environment variables when you log into your system and they are always CAPITAL LETTERS to differentiate them from user-defined environment variables.

To see these global variables, type printenv command:

printenv command

As you can see, there are a lot of global environment variables, to print only one of them, type echo command followed by $VariableName. Ex: to print HOME variable type echo $HOME.

home variable

Local variables

Actually, the Linux system also defines some standard local environment variables for you by default.

Unfortunately, there is no command that displays only local environment variables, but if you type the set command, you will see the global and local variables for the shell you are running and available to that shell.

Setting Local Environment Variables

You can set your own environment variables directly from the shell, once you open the shell you’re allowed to create local variables that are visible within your shell process. You just type variableName you want, followed by an equal sign and the variable value

You just type variableName you want, followed by an equal sign and the variable value WITHOUT any spaces:

mysite=likegeeks

And to print the variable value, use the echo command:

echo $mysite

Sure enough, it prints likegeeks.

local environment variables

OK, what if your variable is more than one word; may be a long string, you can put the string between single quotations:

mysite=’likegeeks is a website that offers tech tutorials for geeks’

And if we type echo $mysite

set environment variables

If you forget the single quotation, the shell will assume that the second word is another command and will give you an error.

As you can see, I use lower case characters for my variable not upper case and this is recommended  NOT required, this helps you distinguishing your environment variables from the system environment variables.

Once you have set your local variable, it will be visible in the currently running shell scope and that means if you start another shell window the variable will not be available in that new window.

Setting Global Environment Variables

To create a global environment variable, you have to create a local environment variable then export it to the global environment like this:

global enviroment variables

As you can see I don’t use dollar sign with the export command so make sure of that.

But there is something, when I close the shell and open it again the variable is gone, so how to make it persistent?

Persisting Environment Variables

Just edit $HOME/.bashrc  and type   export myvar='welcome to likegeeks'  and save the file:

print persistent enviroment variable

Removing Environment Variables

This can be done by using the unset command:

unset enviroment variable

Default Shell Environment Variables

As we know, the system defines some variables for us, one of those variables is the PATH variable, this variable holds the paths of the directories that the shell uses to look for commands, each directory is separated by a colon.

Setting the PATH Environment Variable

If you to add a directory to the PATH variable, the shell will search in that directory also for an executable to run when you type any command.

Just append the path variable followed by a colon and the new directory like this:

add path to enviroment variable

And if you want to persist the PATH variable, you have to edit the .bashrc file and add type it like this:

persistent path variable

There is a useful trick that some sysadmins do which is adding a period . to the path variable so the shell will search for an executable in the current directory you are in wherever you are.

This is relatively risky, you might give the attacker the opportunity to run a malicious script or malware in his current directory, so if you do this trick, you should know what you are doing.

Locating System Environment Variables

There are three ways of starting a bash shell:

  • default login shell at login time
  • the interactive shell that is not the login shell
  • non-interactive shell to run a script

login shell

When you log into the Linux system, the bash shell starts as a login shell. The login shell looks.

There are four startup files that you can process the commands from:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bash_login
  • $HOME/.profile

/etc/profile runs on every startup with every user, the other 3 files run for every specific user, you can call them user specific environment variables.

Interactive shell

If you start a bash shell without logging into a system like when you go to the rescue mode, that shell is called the interactive shell. It doesn’t act like the login shell, but it still provides a CLI prompt for you to enter commands.

If you start an Interactive shell, the system will not look for /etc/profile but instead will look for .bashrc in your HOME directory.

Non-interactive shell

This is the shell that the system starts to execute a shell script itself and there is no CLI prompt to worry about.

Users can customize these files to include environment variables and startup scripts for their own use, just edit the desired file and type the variable you want and save it.

Variable Arrays

One of the neat features of environment variables is that they can be used as arrays which hold multiple values.

myvar=(first second third fourth)

Now if you check the value of that array using echo command, you will find it returns the first element only.

To get a specific element, just reference it by its position, and the positions start from zero so to get the third one, type it like this:

echo ${myvar[2]}

To display the entire array type asterisk instead of a number:

echo ${mytest[*]}

variable array

You can remove an element of the array using unset command:

unset mytest[2]

Or you can remove the whole array:

unset myvar