Shell Variables Flashcards
Shell variables are assigned using an..?
A=apple syntax
Variables are examined (“dereferenced”) with the …?
$ character, as in echo $A
At the kernel level, every process has a collection of environment variables, which are inherited by …?
child processes.
The export command converts a shell variable into an…?
environment variable.
The set and env commands list…?
shell variables and environment variables, respectively.
The bash shell allows users to …?
set and reference shell variables.
A shell variable is simply a …?
named value that the shell remembers.
Shell variables can be used in…?
commands and shell scripts and can also be referenced by programs as configuration options.
(For example, the mutt email client runs an external editor when composing a message. By default this editor is vi. However, before running vi it will check to see if a variable called EDITOR has been set. If it has, then the command defined by EDITOR is used instead of vi. Most programs that launch external editors work the same way.)
There are two types of shell variables…?
local variables and environment variables.
A local variable exists only within…?
the shell which it is created.
Environment variables are inherited by…?
child shells such as when a graphical terminal is launched after logging in.
How to set a local variable…?
A = apple.
(don’t place any spaces on either side of the = sign. Now the shell will “hang on” to this association for as long as the shell exists (or until it is explicitly unset,)
Whenever prince would like to use the value “apple”, he can use use the variable A instead, preceding the variable with a…?
dollar sign ($), as in echo $A
This is called dereferencing the variable A.
The variable can be used anywhere on the command line (or in shell scripts). What if prince, waxing poetic, decided to write a few lines about apples, which he wanted to save in a file called ode_to_apple.txt. The following line could get him started…..?
[prince@station prince]$ echo “Oh, I like them squishy”»_space; ode_to_$A.txt
[prince@station prince]$ ls
ode_to_apple.txt
When the bash shell examined the command line, it replaced $A with apple. These are the basics of shell variables. Variables are established, and set, with a VAR=value syntax, and dereferenced with a $VAR syntax.
What can be used for variable names?
Variable names can be any string of alphanumeric characters (A-Z, a-z, 0-9), and the underscore (_), but cannot start with a number
Shell variables are case…?
sensitive.
[prince@station prince]$ B=banana
[prince@station prince]$ echo $B is my favorite fruit
banana is my favorite fruit
[prince@station prince]$ echo $b is my favorite fruit
is my favorite fruit
What can be a variable’s value?
Anything
When assigning variables, the syntax is name=value, with no spaces. What if prince wanted the variable FRUIT to resolve to the phrase mushy bananas?
[prince@station prince]$ FRUIT=mushy bananas
-bash: bananas: command not found
We have stumbled into an advanced syntax for setting variables, namely name=value command, which sets the variable name only for the execution of the specified command. The bash shell dutifully set the variable FRUIT to the value mushy, and went to execute the command bananas, with expectable results. All of this is not the important bit. The important bit is that if you want to set a variable to a value which contains spaces, you must include the value in quotes.
[prince@station prince]$ FRUIT=”mushy bananas”
[prince@station prince]$ echo $FRUIT is my favorite fruit
mushy bananas is my favorite fruit
With this modification, prince gets the correct behavior from the bash shell, if not correct English grammar.
When dereferencing variables, the variable name can be marked using…?
braces {}, if need be.
see https://academy.redhat.com/courses/rha030-6.1/rha030_bash_shvar.html for example.
When finished with a variable, the variable may be unbound from its value with the…?
unset command.
[prince@station prince]$ unset A
[prince@station prince]$ echo $A
[prince@station prince]$
Bash Read Only Variables:
Variable: ?
Expands to: ??????
The exit status of the most recently executed command.
Bash Read Only Variables:
Variable: -
Expands to: ?????
Currently enabled shell option flags
Bash Read Only Variables:
Variable: $
Expands to: ?????
Process id (pid) of current shell.
Bash Read Only Variables:
Variables: !
Expands to:?????
Process id (pid) of most recent background command.
Bash Read Only Variables:
Variables: _
Expands to: ?????
Last token of previous command.
Bash Read Only Variables:
Variables: PPID
Expands to: ????
The process id (pid) of the shell’s parent.
Bash Read Only Variables:
Variables: SHELLOPTS
Expands to: ?????
Colon separated list of currently enabled shell options, as reported by the set -o command.
Bash Read Only Variables:
Variables: UID
Expands to: ???
The userid of the current user.
Bash Preassigned Variables:
Variable: BASH_VERSION
Expands to: ??????
The current bash version
Bash Preassigned Variables:
Variable: HOSTNAME
Expands to: ?????
The DNS hostname of the current machine.
Bash Preassigned Variables:
Variable: OLDPWD
Expands to:????
The previous working directory.
Bash Preassigned Variables:
Variable: PWD
Expands to:????
The current working directory.
Bash Preassigned Variables:
Variable: RANDOM
Expands to:????
A random number between 0 and 32767
Bash Preassigned Variables:
Variable: SECONDS
Expands to:????
The number of seconds since the shell was started.
Just as the bash shell allows users to assign name-value pairs called shell variables, the Linux kernel allows any process to….?
define name-value pairs called environment variables.
These variables are a part of the process stored in the kernel, just as the process id, user id, and current working directory are part of the process. More importantly, whenever a process starts another process (such as the bash shell starting the ls command).
Environment variables are…?
nherited by the child process. This allows users to use the bash shell to create or modify an environment variable, and then all commands started by the shell will inherit that variable.
How do we create environment variables within the bash shell…?
First, a shell variable is created, and then the shell variable is “promoted” to an environment variable using the export command. (The variable will then be exported to any future child processes).
Examples:
https://academy.redhat.com/courses/rha030-6.1/rha030_bash_shvar.html
Environment variables are often used to…?
configure commands with information about local configurations, or in other words, information about the local environment. As an example, many commands will look for an environment variable called LANG to determine the user’s language, and modify their output accordingly.
See : https://academy.redhat.com/courses/rha030-6.1/rha030_bash_shvar.html
By setting the LANG environment variable to…?
de_DE, the abbreviation for the day “Friday” becomes the customary German abbreviation.
By setting LANG to es_ES, the effects are…?
even more obvious, as the day’s and the month’s abbreviations have changed to Spanish (as well as capitalization conventions).
An important point deserves restating. The date command did not change behavior because the bash command had an environment variable called LANG (directly). The process running the date command modified its output because it had its own environment variable called LANG. It just happened to inherit this variable from the bash shell. All processes have environment variables, not just shells.
Why didn’t prince have to explicitly export the variable LANG? The variable is already an environment variable, set by startup scripts. Once a variable is an environment variable, it can be modified (and removed) using the same syntax as shell variables.
Often, users use a shorter syntax to both create and export an environment variable:
[prince@station prince]$ export EDITOR=nano
With this single command, prince has created, assigned, and exported the variable EDITOR.
The bash shell provides two commands for listing which variables are defined….?
set and env.
The set command, without arguments, lists…?
bothshell variables and environment variables associated with the shell
the env command, again without arguments, lists only…?
variables which have been exported to the environment.
Commonly Used Environment Variables:
Variable: TERM
Use: ??????
Specifies low level configuration of the user’s terminal. This variable is more relevant when using a serial line console (“dumb terminal”) to access the system.
Commonly Used Environment Variables:
Variable: PATH
Use: ??????
Specifies directories to be searched for executable files.
Commonly Used Environment Variables:
Variable: DISPLAY
Use: ??????
Specifies which X server clients should use in the graphical environment.
Commonly Used Environment Variables:
Variable: LANG
Use: ??????
Specifies the preferred language for internationalized programs.
Commonly Used Environment Variables:
Variable: EDITOR
Use: ??????
Many programs rely on an external editor for user input. Often, the default editor is vi. If the EDITOR environment variable is set, the specified editor will be used instead.
Commonly Used Environment Variables:
Variable: PRINTER
Use: ??????
Most commands that submit or manage print jobs will examine this environment variable to determine the default printer.