Variable
program = instruction (read-only) + data (location variables, lists, arrays of data stores)
Directives can be called through positional variables, and data passed to the script
A variable name can refer to a "named Memory Space": The memory space of the name, which can be called by the name of the pre-divided memory space
Types of data stored internally by variable type variables
The role of variable types
Limit the storage space
The storage format is limited
Limit the operations that are involved
Types of variables
Character type
Numeric type
Integral type
Floating point Type
Types of variables
When a strongly typed variable is defined, the type of the variable must be specified, and the participating operations must conform to the requirements
Calling an unspecified variable will cause an error.
When you define a variable with a weak type , you do not specify the type of the variable, and the implicit conversion occurs automatically when participating in the Operation
Direct assignment, direct reference, default to character type
Var=value means store value value in var memory space
Bash weak type, interpreted type
1, do not declare, direct reference
2, participate in the operation, automatic conversion
Types of variables (by bash scope)
Local Variables the effective scope is the life cycle of the current shell , which is not valid for Shell processes other than the current shell and for the child or parent processes of the current shell .
environment variable effective scope The current shell process and its child shell processes are not valid for other shells. When you run the script, the script runs in the child shell of the current shell
The local variable takes effect in the current shell process and only takes effect on a piece of code (usually referred to)
Positional variables function: To script parameters, in the script script can be called to call the parameters of the script
Special variables generally refer to built-in variables, $? Return status, $ return state, instruction can be called through positional variables, parameters passed to script
Local variables
the effective range is the life cycle of the current shell , not valid for Shell processes other than the current shell and child or parent processes of the current shell .
1) variables defined in the current shell that are valid for the current shell (during the life of the current shell process)
[email protected] ~]# TTY #当前终端/dev/pts/2[[email protected] ~]# a=3 #在模拟终端2上定 A local variable [[email protected] ~]# echo $a #可以显示其变量值3
2) variables defined in the current shell that do not take effect in the new shell
[[email protected] ~]# TTY #另起一个shell, at this time/dev/pts/0[[email protected] ~]# echo $a on analog terminal 0 #显示其变量的值
3) Variables do not take effect in the shell process
[[email protected] ~]# pstree #显示当前系统上的进程树,systemd -- #systemd为当前shell的父进程 ├─sshd─┬─sshd───bash───pstree # location of current shell [[email protected] ~]# bash # New launch of a sub-shell[[email protected] ~]# pstreesystemd -- ├─sshd─┬─sshd───bash───bash───pstree #当前shell为子shell [[email protected] ~]# echo $a #变量不会生效 [[email protected] ~]# [[email protected] ~]# exit #退出当前shell, back to Father shellexit[[email protected] ~]# pstreesystemd─ ├─sshd─┬─sshd───bash───pstree #回到当前shell进程 [[ email protected] ~]# echo $a #变量生效 3
Environment variables
Effective Scope The current shell process and its child shell processes are not valid for other shells
Comments
1) variables defined in the current shell, valid for the current shell and child shell
[[email protected] ~]# TTY #当前终端/dev/pts/2[[email protected] ~]# declare-x name=pidof #定义环境变量 [[ Email protected] ~]# echo $name pidof[[email protected] ~]# bash[[email protected] ~]# echo $namepidof [[Email Protected] ~]# Exitexit
2) variables defined in the current shell that do not take effect in the new shell
[[email protected] ~]# TTY #另起一个shell, at this time/dev/pts/0[[email protected] ~]# echo $name on analog terminal 0 [[Email PR Otected] ~]#
Positional variables
$1,$2,.... Invoke each parameter passed to the script
[Email protected] ~]# nano Psvar.sh#!/bin/bashecho "\$1:" echo "\$2: $" [[email protected] ~]# chmod +x psvar.sh [[Emai] L protected] ~]# ls-l psvar.sh-rwxr-xr-x 1 root root 1 15:10 psvar.sh[[email protected] ~]#./psvar.sh Tom jerry$ 1:tom$2:jerry
Special variables
$: Indicates the command itself, $? The execution status result of the command
# echo ' Echo ' \$0: $ "' >> Psvar.sh[[email protected] ~]#./psvar.sh Tom jerry$1:tom$2:jerry$0:./psvar.sh
Local variables
Assignment : stores The value represented in the name variable in the memory space
# name= ' value '
Name of memory space
= Assignment Symbol
Value values
"or" "reference symbol
Reference Implementation Assignment:
Plain Text reference: assigned a text literal to a variable
Variable reference: assigns the value of a variable to another variable
Command reference: assigns the execution result of the command to the variable:
Mixed use
Note: If a value has a space, it must be quoted when assigning a value
Assigning values to variable reference implementations
[Email protected] ~]# Username=pig[[email protected] ~]# echo $name [[email protected] ~]# name= $username [[Email protecte D] ~]# Echo $namepig
Command Reference Implementation Assignment
[[email protected] ~]# pwd/root[[email protected] ~]# name= ' pwd ' [[email protected] ~]# echo $name/root
Mixed use
# filename= ' Date +%f-%h-%m-%s ' # echo $filename 2017-08-01-15-41-45
Values have spaces and need to be quoted when assigning values
[[email protected] ~]# Name=tom Obama-bash:obama:command not found[[email protected] ~]# name= "Tom Obama" [Email protect ED] ~]# Echo $nametom Obama
variable reference , $name, ${name}, usually with $name. When a variable name is used in conjunction with a string that can be used as a variable name, so that the entire name is not treated as a variable, you must add {}
' Strong reference to the variable reference in which it is not replaced by the value stored in the variable
"" , the variable reference in which the weak reference is replaced by the value stored in the variable
1, when should use ${name}
# animal=pig# echo "There is some $animals" #把整个名字当作变量. Because this variable is undefined, it is empty there is some # echo "There is some ${animal}s" there is some pigs
2. The difference between strong and weak references
[[email protected] ~]# echo "$animal" variable will be replaced by pig [[email protected] ~]# echo ' $animal ' variable will not be replaced $animal
Show all local variables and environment variables: Set
Variable Destruction : When the shell terminates, the variable is destroyed. Destroying a variable before the shell terminates: unset name
[Email protected] ~]# Name=pika[[email protected] ~]# echo $namepika [[email protected] ~]# unset name[[email protected] ~ ]# echo $name [[email protected] ~]#
Environment variables
assignment values the value represented in the memory space of the name variable
Method One # Declare-x name= ' value ' method two # export Name= ' value ' method three # name=value# Declare-x name# export Name
References
# $name, ${name}
Show all environment variables
# export# env# printenv
Where uppercase is the environment variable: Define bash Work environment
Bash has many built-in environment variables: For uppercase variables, do not assign values directly, define environment variables, avoid bash's built-in environment variables, or change bash's work behavior.
Path,shell,uid,ps1,histsize,home,pwd,oldpwd
[Email protected] ~]# echo $PATH #bash解析命令所依赖的变量/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/ Usr/bin:/root/bin[[email protected] ~]# echo $SHELL #当前shell环境/bin/bash[[email protected] ~]# echo $UID #当前有效用户的 ID number 0[[email protected] ~]# echo $PS 1 #定义命令提示符字串 [\[email protected]\h \w]\$[[email protected] ~]# echo $HISTSIZE #显 1000[[email protected] ~]# echo $HOME #显示当前用户的家目录位置/root[[email protected] ~]# echo $PWD #显示当前所处的目录/root [ [Email protected] ~]# echo $OLDPWD #显示最近一次切换的目录 [[email protected] ~]#
variable destruction : unset
unset
The law of variable naming
1, can not use keywords and reserved words, if,for
2, can only use numbers, letters and underscores, can not start with a number
3, try to do, see the name of the meaning of understanding
Totalweight-Totalweight Avoid all caps--total_weight or with hyphens
4, try to avoid _ start
5. Try to avoid all caps
The law of file name naming
1. Case-sensitive
File1, File1, FILE1 are different files.
2. Do not use special characters
/: root directory, path delimiter
3, length less than 255 characters
4. Files that begin with. are hidden files
The philosophical thought of Linux
1. All Documents
2, combination of small programs
3. No interaction
4. Text editing configuration
constants, read-only variables : variables are not allowed to change after they are defined. Only wait until the shell process terminates, and then it dies.
Assign Value
Method one ReadOnly name method two declare-r name
Notes
[Email protected] ~]# Name=obama[[email protected] ~]# echo $nameobama [[email protected] ~]# readonly Name[[email Protect Ed] ~]# name=jerry-bash:name:readonly variable[[email protected] ~]# unset name-bash:unset:name:cannot unset:readonl Y variable
Local variables
Used in the function body
Positional variables
Directives can be called through positional variables, parameters passed to the script
Variable
$1,$2,... Corresponding call 1th 2nd 3rd ... Parameter The $ command itself
Call the arguments passed to the script
$* means that the passed arguments are treated as a string when called
[email protected] Each parameter as a separate string
$# the number of arguments passed to the script
[email protected] ~]# cat posvar.sh #!/bin/bashecho "\$1:" echo "\$2: $" echo "\$3: $" echo "\$*: $*" echo "\[email prot Ected]: [email protected] "echo" \$#: $# "echo" \$0: $ "
[Email protected] ~]#/posvar.sh Tom Jerry blair$1:tom$2:jerry$3:blair$*: Tom Jerry Blair[email protected]: Tom Jerry blair$#: 3$0:./posvar.sh
Change port operator shift [n] default kick one
[email protected] ~]# cat posvar.sh #!/bin/bashecho "\$1: $" Shiftecho "\$1:" Shift 2echo "\$1:" echo "\$*: $*" echo " \[email protected]: [email protected] "echo" \$#: $# "echo" \$0: $ "
[Email protected] ~]#/posvar.sh Tom Jerry Blair mariadb$1:tom$1:jerry$1:mariadb$*: Mariadb[email protected]: mariadb $#: 1$0:./posvar.sh
Pass parameters to the script and do the statistics for the lines of text
# Vim posvar.sh#!/bin/bashcountlines= ' cat $ | Wc-l ' echo ' has $countlines lines "
#./posvar.sh/etc/fstab/etc/fstab has ten lines
This article is from the "Reading" blog, make sure to keep this source http://sonlich.blog.51cto.com/12825953/1952836
Cigarette Smoker---------Linux bash basic feature variables (3)