1. Shell variables are divided into local variables and environment variables.
1. Local variable -- Used in the script currently running by the user
1) define the local variable format: Variable-name = Value
Example: [root @ jike1/root] # localtest = "test"
[Root @ jike1/root] # echo $ localtest Test
2) display local variable format: Set
Example: [root @ chinaitlab root] # Set
3) Clear the local variable format: unset variable-name
For example: [root @ jike1/root] # unset localtest
Then execute echo $ localtest, and the output of the variable localtest will not be displayed.
2. environment variables -- used in all sub-Processes
1) define the environment variable format: Export variable-name = value (an export keyword is missing compared with the definition of the local variable)
Example: [root @ chinaitlab/root] # export domain = "chinaitlab.com"
[Root @ chinaitlab shell] # vi testenv. Sh
#! /Bin/bash
Echo $ domain
[Root @ chinaitlab shell] # chmod + x testenv. Sh
[Root @ chinaitlab shell] #./testenv. Sh
Chinaitlab.com
2) display environment variable format: ENV (set is used for local variable display and env is used for environment variable display)
Example: [root @ chinaitlab test] # env
3) Clear the environment variable format: unset variable-Name (the usage is the same as that of local variables, both use unset)
Example: [root @ chinaitlab shell] # unset domain
Execute./testenv. Sh again, and the output of the variable domain will not be visible.
In fact, the interactive interpretation and execution of user input commands as a command language is only one aspect of the shell function, shell can also be usedProgramDesign, which provides the means to define variables and parameters and a wide range of program control structures. Using shell programming is similar to a batch processing file in DOS, called a shell script, or a shell program or shell command file.
Shell basic syntax
Like advanced programming languages, shell also provides instructions and variable usage functions. For shell, the values of all variables are a string. The shell program uses $ VaR to reference the value of a variable named var.
Shell has the following basic types of variables.
(1) environment variables defined by shell:
At the beginning of execution, shell has defined some variables related to the system's working environment. You can also redefine these variables. Common shell environment variables include:
Home is used to save the full path name of the registration directory.
PATH is used to save the directory path names separated by colons. Shell searches these directories in the order given in the PATH variable, and the first executable file with the same name as the command will be executed.
The type of the term terminal.
The identifier of the current user. The value is a string consisting of digits.
The absolute path name of the current working directory of PWD. The value of this variable varies with the use of the CD command.
PS1 primary prompt. for privileged users, the default primary prompt is #. For common users, the default primary prompt is $.
When the PS2 shell receives the user's input command, if the user enters "/" at the end of the input line, then press enter, or when the shell determines that the command entered by the user is not over when the user presses the Enter key, the auxiliary prompt is displayed, prompting the user to continue entering the rest of the command. The default auxiliary prompt is>.
(2) User-Defined variables:
You can define your own variables according to the following syntax rules:
Variable name = variable value
Note that $ should not be added before the variable name when defining the variable, and $ should be added before the variable name When referencing the variable content; when assigning values to the variable, no space must be left on both sides of the equal sign. If the variable itself contains spaces, the entire string should be enclosed in double quotation marks.
When writing a shell program, we recommend that you use uppercase letters to indicate all variable names to distinguish them from command names.
Sometimes, when we want to describe a variable and set it to a specific value without changing its value, we can use the following command to ensure the read-only of a variable:
Readonly variable name
At any time, the created variables are only local variables of the Current Shell, so they cannot be used by other commands or Shell programs run by the shell, the Export command can provide a local variable to other commands executed by shell in the format:
Export variable name
You can also use the Export command when assigning values to variables:
Export variable name = variable value
Variables described in export can be accessed in all commands or programs run after shell.
(3) location parameters:
A location parameter is a variable that is determined by its location in the command line that calls the shell program. It is a parameter entered after the program name. Location parameters are separated by spaces. Shell replaces $1 with the first location parameter in the program file, and the second with $2, and so on. $0 is a special variable whose content is the file name of the current shell program. Therefore, $0 is not a location parameter, $0 is not included when all the current location parameters are displayed.
(4) predefined variables:
Predefine variables are similar to environment variables and are also defined at the beginning of shell. The difference is that you can only use these variables according to shell definitions, rather than redefinition. All predefined variables are composed of the $ operator and another symbol. Common shell predefined variables include:
$ # Number of location parameters.
$ * Content of all location parameters.
$? Status returned after the command is executed.
$ Process ID of the current process.
$! The last process number that runs in the background.
$0 indicates the name of the currently executed process.
Where, $? Used to check whether the previous command is correctly executed. (In Linux, if the exit status of a command is 0, the command is correctly executed. If the value is not 0, an error occurs .)
$ The most common purpose of a variable is to use the name of the temporary file to ensure that the temporary file will not be repeated.
(5) variable for parameter replacement:
Shell provides the parameter replacement function so that you can assign different values to variables based on different conditions. There are four types of parameters for parameter substitution. These variables are usually associated with a location parameter and determine the value of the variable based on whether the specified location parameter has been set to a class, their syntax and functions are as follows.
A. Variable =$ {parameter-word}: If a parameter is set, replace the value of the parameter with the value of the parameter. Otherwise, replace the value with word. That is, the value of this variable is equal to the value of a parameter. If this parameter is not set, the variable is equal to the value of word.
B. variable =$ {parameter = word}: If a parameter is set, replace the value with the value of the parameter. Otherwise, set the variable to word and replace the value with word. Note that location parameters cannot be used in this way, because location parameters cannot be assigned values in Shell programs.
C. Variable =$ {parameter? Word}: If a parameter is set, replace the value of the variable with the value of the parameter. Otherwise, word is displayed and exited from shell. If word is omitted, standard information is displayed. This variable must be equal to the value of a parameter. If this parameter is not set, a message is displayed and then exited. Therefore, this method is often used to indicate errors.
D. Variable =$ {parameter + word}: If the parameter is set, replace the variable with word. Otherwise, do not replace the variable.
In all the four forms, the "parameter" can be either a location parameter or another variable, but there are many situations where the location parameter is used.
Process Control for Shell Program Design
Like other advanced programming languages, shell provides commands used to control program execution processes, including conditional branches and loop structures. You can use these commands to create very complex programs.
Unlike traditional languages, shell is used to specify condition values instead of Boolean operations, but commands and strings.
1. Test command
The test command is used to check whether a condition is true. It can be used to test values, characters, and files. The test characters and corresponding functions are as follows.
(1) numerical test:
-If EQ is equal to, it is true.
-If the ne value is not equal to the ne value, it is true.
-A value greater than-GT is true.
-If Ge is greater than or equal to, it is true.
-If it is less than, it is true.
-If the value of-Le is less than or equal to, it is true.
(2) string test:
= Equals to true.
! = Not equal to true.
The-Z string length is false.
-If the length of the N string is not pseudo, it is true.
(3) file test:
-E: the file name is true if the file exists.
-R: The file name is true if the file exists and is readable.
-W: The file name is true if the file exists and can be written.
-X: the file name is true if the file exists and can be executed.
-S file name is true if the file exists and contains at least one character.
-D. The file name is true if the file exists and is a directory.
-F: The file name is true if the file exists and is a normal file.
-C: The file name is true if the file exists and is a special character file.
-B: The file name is true if the file exists and is a special file.
In addition, Linux also provides (!) , Or (-O), non-(-a) logical operators, used to connect test conditions, the priority is :! Highest, followed by-A and-o.
Bash can also perform simple arithmetic operations in the following format:
$ [Expression]
For example:
Var1 = 2
Var2 = $[var1*10 + 1]
Then the value of var2 is 21.
2. If Condition Statement
The condition branch in the shell program is implemented through the IF Condition Statement. The general format is:
If condition command string
Then
Command string when the condition is true
Else
Command string when the condition is false
Fi
3. For Loop
The for loop executes a command sequence for all possible values of a variable. The values assigned to the variable can be provided in the form of a numerical list in the program, or in the form of a positional parameter outside the program. The general format of the For Loop is:
For variable name [in Value List]
Do
Several command lines
Done
The variable name can be any string selected by the user. If the variable name is Var, the value given after in replaces $ VaR in the circular command list in sequence. If in is omitted, the value of VaR is the location parameter. Every possible value assignment to a variable will execute the command list between do and done.
4. While and until Loops
Both the while and until commands use the return status value of the command to control the loop. The general format of the while loop is:
While
Several command lines 1
Do
Several command lines 2
Done
As long as the return status of the last command in "Several command line 1" in while is true, the while loop continues to execute "Several command line 2" between do... done ".
The until command is another loop structure, which is similar to the while command in the following format:
Until
Several command lines 1
Do
Several command lines 2
Done
The difference between an until loop and a while loop is that a while loop continues to run when the condition is true, while an until loop continues to run when the condition is false.
Shell also provides the "true" and "false" commands to create an infinite loop structure. Their return states are always 0 or not 0.
5. Select case conditions
The IF Condition Statement is used to select one of the two options, and the case condition selection provides you with a method to select one from multiple options based on the value of the string or variable. The format is as follows:
Case string in
Exp-1)
Several command lines 1
;;
Exp-2)
Several command lines 2
;;
......
*)
Other command lines
Esac
By calculating the string value, shell compares the results in sequence with the formula exp-1, exp-2, etc. until a matching formula is found. If a match is found, run the following command until a semicolon (;) is encountered.
You can also use shell wildcards ("*", "?" , "[]"). * Is usually used as the final formula of the Case command to execute the "other command line" command if no matching item is found.
6. Unconditional control statements break and continue
Break is used to terminate the execution of the current loop immediately, while contiune is used to start the execution of the next loop immediately without executing the statements following the loop. These two statements are valid only when they are placed between do and done.
7. Function Definition
You can also define functions in shell. A function is actually composed of several shell commands, so it is similar to a shell program in form. The difference is that it is not a separate process, but a part of the shell program. The basic format of the function definition is:
Functionname
{
Several command lines
}
The format of the called function is:
Functionname param1 param2...
Shell functions can complete some routine work and have their own exit States. Therefore, functions can also be used as conditions for control structures such as if and while.
Parameters are not required for function definition, but can be included when a function is called. In this case, shell will assign these parameters to the corresponding location parameters $1, $2 ,... and $ *.
8. Command Group
There are two command grouping methods in shell: () and {}. The former creates a new sub-process when the shell executes the commands in (), and then the sub-process executes the commands in the circular arc. When a user does not want to change the status set (such as location parameters, environment variables, and current working directory) during command execution to affect the execution of the following statements, these commands should be placed in the circular arc to ensure that all changes only affect sub-processes, and the parent process is not disturbed. {} Is used to use the output results of the commands executed in sequence for the input (pipe mode) of another command ). When we really want to use circular arc and curly arc (such as computing formula priority), we need to add an escape character before it (/) so that the shell knows that they are not used for command execution control.
9. Signal
The trap command is used to capture signals in Shell programs. There are three response methods:
(1) execute a program to process this signal.
(2) receive the default signal operation.
(3) Ignore this signal.
Trap provides three basic forms for the above three methods:
The first form of Trap Command will execute the command string in double quotation marks when shell receives the signal with the same value as the signal list.
Trap 'commands' signal-list
Trap "commands" signal-list
To restore the default signal, use the second form of trap command:
Trap signal-list
The third form of trap command allows the ignore signal to be ignored:
Trap "" signal-list
Note:
(1) The signal 11 (segment violation) cannot be captured, because the shell itself needs to capture the signal for memory dump.
(2) In the trap, you can define the processing of the signal 0 (in fact, there is no such signal). The shell program sends this signal when it terminates (such as executing the exit Statement.
(3) After capturing the signals specified in the signal-list and executing the corresponding commands, the shell program will continue to execute the command after the command received when the signal is received, which will easily cause the shell program to be unable to terminate.
in trap statements, single quotation marks and double quotation marks are different. When the shell program first encounters a trap statement, it will scan the commands in commands. If commands is enclosed in single quotes, shell will not replace the variables and commands in commands. Otherwise, the variables and commands in commands will be replaced with the specific values at that time.