Linux Environment Variables in Bash Scripting

0. A Stupid Mistake

I wrote shell script from time to time, but never learned it seriously. So I wrote a script contains lines as below,

#!/bin/bash
PATH=”/”
ls -l $PATH

And then I got this error,

./test.sh: line 3: ls: command not found

I struggled a little bit and suddenly realized long time ago I made the same mistake. PATH is an environment variable and it’s overwritten by my script. In the bash script, the shell looks at the directories defined in PATH for the command. In the script above, the PATH variable has been overwritten, and therefore the shell cannot find the command.

Once I changed the code to below, it works.

#!/bin/bash
FPATH=”/”
ls -l $FPATH

The mistake is stupid, and we all make mistakes like this. But I did it twice. 🙁

1. Linux Environment Variables

Environment variable contains information shared by one or more applications. It helps one to change the settings for one or more applications easily.

One can list all environment variables by the command,

env

If you simply want to check a value of a specific environment variable, use the command echo followed by the variable name (say HOME) preceded by “$” sign,

echo $HOME

We can create shell variables with environment variables. For example,

MY_DIR=$HOME/roman10/code/

2. Set Linux Environment Variables

Define Environment Variables Globally

To define a environment variable for all users, one can use /etc/bash.bashrc or /etc/profile

For example, add a line below

PATH=”/usr/bin”

Define Environment Variables for a Particular User

To define a environment variables for a particular user, one can use ~/.bashrc or ~/.profile.

For example, add a line below,

PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:”

Define Environment Variables for a Particular Session

To define a environment variable for a particular session, we can use the export command.

For example, enter the command below,

export TEST=”test”

We can check by the command,

echo $TEST

3. Different Between X=”1” and export X=”1”

If you simply type X=”1” in the shell, the variable will be visible in the shell. It won’t be shown in “env” output. And if you launch another program in the same shell, that program won’t be able to see it as well.

On the contrast, if you use export, the variable will be visible in “env” output and the other program launched in the shell.

For example, we type the following in the shell,

X=”1”
export X1=”2”

Now we enter the command below,

echo $X
echo $X1

It will give output “1” and “2”

But if we start another program, say, sh by entering the command,

sh

We enter the commands in sh terminal,

echo $X
echo $X1

It will give empty and “2”. Here X1 is visible to sh, but not X.