set命令显示当前shell的变量,包括当前用户的变量;
env命令显示当前用户的变量;
export命令显示当前导出成用户变量的shell变量。
每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量,
但shell自己的变量不同shell是不同的,比如BASH_ARGC,BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export“导出”变成一个用户变量。
0.declare命令
declare命令用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。declare的功能与typeset命令的功能是相同的。
语法:
declare(选项)(参数)
选项:
+/-:”-“可用来指定变量的属性,”+”则是取消变量所设的属性;
-f:仅显示函数;
r:将变量设置为只读;
x:指定的变量会成为环境变量,可供shell以外的程序来使用;
i:[设置值]可以是数值,字符串或运算式。
参数:
shell变量:声明shell变量,格式为“变量名=值”。
主要作用就是声明shell变量:declarevar=value,与之等价的功能是var=value,另外还有一个与之等价的功能typesetvar=value
例如:三种声明shell变量的方式
[root@VM_0_12_centos~]#var1=var1value
[root@VM_0_12_centos~]#declarevar2=var2value
[root@VM_0_12_centos~]#typesetvar3=var3value
[root@VM_0_12_centos~]#echo$var1
var1value
[root@VM_0_12_centos~]#echo$var2
var2value
[root@VM_0_12_centos~]#echo$var3
var3value
declare-x将shell变量输出到环境变量
[root@VM_0_12_centos~]#declare-xvar1=value1
[root@VM_0_12_centos~]#env|grepvar1
var1=value1
1.unset命令
unset命令用于删除已定义的shell变量(包括环境变量)和shell函数。unset命令不能够删除具有只读属性的shell变量和环境变量。
语法:
unset(选项)(参数)
选项:
-f:仅删除函数;
-v:仅删除变量。
参数:
shell变量或函数:指定要删除的shell变量或shell函数。
例如:删除上面的var1,var2,var3,其中var1已经输出为环境变量,var2和var3为普通shell变量。
[root@VM_0_12_centos~]#echo$var1
value1
[root@VM_0_12_centos~]#echo$var2
var2value
[root@VM_0_12_centos~]#echo$var3
var3value
[root@VM_0_12_centos~]#env|grepvar1#证明var1为环境变量
var1=value1
[root@VM_0_12_centos~]#env|grepvar2
[root@VM_0_12_centos~]#env|grepvar3
[root@VM_0_12_centos~]#unsetvar1
[root@VM_0_12_centos~]#unsetvar2
[root@VM_0_12_centos~]#unsetvar3
[root@VM_0_12_centos~]#env|grepvar2
[root@VM_0_12_centos~]#env|grepvar1
[root@VM_0_12_centos~]#echo$var3
添加一个环境变量并设置为只读删除不了环境变量
[root@VM_0_12_centos~]#declare-xvar6=value6#声明一个变量并输出到环境变量
[root@VM_0_12_centos~]#env|grepvar6
var6=value6
[root@VM_0_12_centos~]#readonlyvar6#设置为只读
[root@VM_0_12_centos~]#unsetvar6
-bash:unset:var6:cannotunset:readonlyvariable
2.Set命令
set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号”+”和”-“的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。
语法:
set(选项)(参数)
选项:
-a:标示已修改的变量,以供输出至环境变量。
-b:使被中止的后台程序立刻回报执行状态。
-C:转向所产生的文件无法覆盖已存在的文件。
-d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e:若指令传回值不等于0,则立即退出shell。
-f:取消使用通配符。
-h:自动记录函数的所在位置。
-HShell:可利用”!”加的方式来执行history中记录的指令。
-k:指令所给的参数都会被视为此指令的环境变量。
-l:记录for循环的变量名称。
-m:使用监视模式。
-n:只读取指令,而不实际执行。
-p:启动优先顺序模式。
-P:启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t:执行完随后的指令,即退出shell。
-u:当执行时使用到未定义过的变量,则显示错误信息。
-v:显示shell所读取的输入值。
-x:执行指令后,会先显示该指令及所下的参数。
参数;
取消某个set曾启动的参数。
实例:设置两个环境变量并设置为环境变量
[root@VM_0_12_centos~]#unsetvar1#删除shell变量
[root@VM_0_12_centos~]#unsetvar2
[root@VM_0_12_centos~]#unsetvar3
[root@VM_0_12_centos~]#var1=value1#定义shell变量的三种方式
[root@VM_0_12_centos~]#declarevar2=value2
[root@VM_0_12_centos~]#typesetvar3=value3
[root@VM_0_12_centos~]#set-avar2#将三个变量输出为环境变量
[root@VM_0_12_centos~]#set-avar3
[root@VM_0_12_centos~]#set-avar1
[root@VM_0_12_centos~]#env|grepvar#查看环境变量
var1=value1
var3=value3
var2=value2
3.env命令
env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用”-“作为参数选项时,隐藏了选项”-i”的功能。若没有设置任何选项和参数时,则直接显示当前的环境变量。
如果使用env命令在新环境中执行指令时,会因为没有定义环境变量”PATH”而提示错误信息”suchfileordirectory”。此时,用户可以重新定义一个新的”PATH”或者使用绝对路径。
语法:
env(选项)(参数)
选项;
-i:开始一个新的空的环境;
-u:从当前环境中删除指定的变量。
参数:
变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”;
指定:指定要执行的指令和参数。
例如:
查看环境变量
[root@VM_0_12_centos~]#env|grepvar
var1=value1
var3=value3
var2=value2
MAIL=/var/spool/mail/root
4.export命令
export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。
一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。
语法:
export(选项)(参数)
选项:
-f:代表[变量名称]中为函数名称;
-n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中;
-p:列出所有的shell赋予程序的环境变量。
参数:
变量:指定要输出或者删除的环境变量。
例如:
[root@VM_0_12_centos~]#exportvar1=value1#定义一个环境变量
[root@VM_0_12_centos~]#env|grepvar
var1=value1
MAIL=/var/spool/mail/root
[root@VM_0_12_centos~]#exportvar1=value11111#修改上面的环境变量
[root@VM_0_12_centos~]#env|grepvar
var1=value11111
MAIL=/var/spool/mail/root
[root@VM_0_12_centos~]#export-nvar1#删除上面的环境变量,只是从环境变量中删除,shell变量仍然存在
[root@VM_0_12_centos~]#env|grepvar
MAIL=/var/spool/mail/root
[root@VM_0_12_centos~]#
6.readonly命令
readonly命令用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。
语法:
readonly(选项)(参数)
选项:
-f:定义只读函数;
-a:定义只读数组变量;
-p:显示系统中全部只读变量列表。
参数:
变量定义:定义变量,格式为“变量名=‘变量值’”。
例如:查看系统的只读变量:
[root@VM_0_12_centos~]#readonly-p
declare-rBASHOPTS=”checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath”
declare-irBASHPID
declare-rBASH_COMPLETION_COMPAT_DIR=”/etc/bash_completion.d”
declare-arBASH_VERSINFO='([0]=”4″[1]=”2″[2]=”46″[3]=”2″[4]=”release”[5]=”x86_64-redhat-linux-gnu”)’
declare-irEU
declare-irPP
declare-rSHELLOPTS=”braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor”
declare-irU
总结:
1.declarevar=value可以声明一个shell变量(与之等价的是var=value,typesetvar=value),也可以直接用declare-xvar=value声明一个变量并直接输出到环境变量,也可以加上-r参数表示只读变量。
2.unsetvar可以删除变量,包括shell变量和环境变量(当前用户变量),不能够删除具有只读属性的shell变量和环境变量。
3.set-avar可以将var变量输出到环境变量
4.env可以查看所有的环境变量,可以加管道命令与grep命令过滤变量
5.exportvar=value用于定义一个环境变量,修改环境变量也是这个,等价于declare-xvar=name
export-nvar用于从环境变量删除此变量,但是shell变量中此变量仍然存在。