If you're just getting started with your Unix scripting or new to Unix shell, today's little tip will make your life much easier: I'm going to show you how to update your shell variables.
Updating shell variable in Unix
If you have a text variable in your script and would like to append some text to it or somehow process this value, it's perfectly normal to reuse the current variable value using a syntax like this:
ubuntu$ echo $VAR1 hello ubuntu$ VAR1=$VAR1" world!" ubuntu$ echo $VAR1 hello world!
You see? It's this easy!
Common cases of reusing variable values in Unix shells
Most frequently, I use the technique described above to update some of my environment variables. I'm sure you'll find them useful too.
Updating the PATH variable
PATH is the user environment variable responsible for the directories where Unix shell looks for executable commands every time you type something. Quite often you get a "file not found" error not because there isn't such a command installed in your OS, but simply because your PATH variable has not a corrept path to a directory with that command.
Here's an example from a standard user on one of my Red Hat Enterprise Linux systems.
I like the runlevel command, it's quite simple and can be useful in scripts. When I attempt to run it, here's what happens:
redhat$ runlevel bash: runlevel: command not found
Like I said earlier, it's most likely because my PATH variable doesn't have the /sbin directory which is where this command resides. Let's confirm this:
redhat$ echo $PATH /usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
Now it's time to update the PATH and append the /sbin path to it:
runlevel command will be found now and here's a proof:
redhat$ runlevel N 5
Updating the MANPATH variable
Another good example is the MANPATH variable, which contains the list of directories with manpages which man command uses.
If some command doesn't have its man page in neither of the directories specified by MANPATH, you'll get an error.
Here's an example from one of the Solaris systems, I'm looking for a Veritas vxprint command man page:
solaris$ man vxprint No manual entry for vxprint. solaris$ echo $MANPATH /usr/man:/opt/sfw/man:/usr/perl5/man
Let's add the /opt/VRTS/man to the MANPATH variable:
bash-2.03# MANPATH=$MANPATH:/opt/VRTS/man solaris$ echo $MANPATH /usr/man:/opt/sfw/man:/usr/perl5/man:/opt/VRTS/man
It's bound to work now:
solaris$ man vxprint Reformatting page. Please Wait... done ...
That's all I wanted to share with you today. Hope you liked the tip, and as always – feel free to ask any questions!
- Environment variables in Unix
- Using variables in shell scripts
- Unix scripts: basic arithmetic operations