linux变量相干总结

linux变量相关总结

shell中有3种变量:用户变量,位置变量,环境变量

用户变量:用户在shell编程过程中定义的变量,分为全局变量和局部变量,用户在定义变量是默认为全局变量,若定义局部变量需要使用local限定词。

(:启动子shell):终止子shell

变量的表示方式$varname实际上是用语法${varname}的简略形式。

位置变量:也称系统变量,位置参数,是shell脚本运行时传递给脚本的参数,同时也表示在shell函数内部的函数参数。

函数复用是优质代码的一大特征。

shell命令执行顺序:别名——关键字——函数——内部命令——外部命令。

exit退出脚本,return退出函数,如果函数没有return语句,则函数返回状态是最后一个命令状态,每一条语句或函数都会返回一个状态。

如果函数保存在其它文件中,可以用sourcedot命令将他们装入当前脚本

自作命令:先在一个文件里写一个函数,然后再当前shell中用source命令读入,则可以用该函数名运行了,类似于命令。

变量运算符

${varname:-word}如果varname存在且非null,则返回varname的值,否则,返回word

${varname:=word}如果varname存在且非null,则返回varname的值,否则将其置为word。然后返回其值

${varname:?message}如果varname存在且非null,则返回varname的值,否则打印message,并退出脚本

${varname:+word}如果varname存在且非null,则返回word,否则返回null


path="/home/prince/desktop/long.file.name"

${varname#pattern}如果模式匹配变量取值的开头处,则删除匹配的最短部分,并返回剩下部分,${path#/*/}prince/desktop/long.file.name

${varname##pattern}如果模式匹配变量取值的开头处,则删除匹配的最长部分,并返回剩下部分,${path##/*/}long.file.name

${varname%pattern}如果模式匹配变量取值的结尾处,则删除匹配的最短部分,并返回剩下部分,${path%.*}/home/prince/desktop/long.file

${varname%%pattern}如果模式匹配变量取值的结尾处,则删除匹配的最长部分,并返回剩下部分,${path%%.*}/home/prince/desktop/long

${varname/pattern/string}varname中匹配模式的最长部分替换为string,只有匹配的第一部分被替换

${varname//pattern/string}........................................,所有匹配的部分被替换,echo-e ${PATH//:/'\n'}

常用参数

格式:declare -p

显示所有变量的值。

 
格式:declare -p var

显示指定变量var的值。

 

格式:declare var=value

格式:var=value

声明变量并赋值。

 
格式:declare -i var

将变量var定义成整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数,就设置为0。

 
格式:declare -r var

格式:readonly var

将变量var声明为只读变量。只读变量不允许修改,也不允许删除。


格式:declare -a var

将变量var声明为数组变量。但这没有必要。所有变量都不必显式定义就可以用作数组。事实上,在某种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值给"[0]"相同。

 
格式:declare -f

显示所有自定义函数,包括名称和函数体。

 
格式:declare -F

显示所有自定义函数名称。


格式:declare -f func

只显示指定函数func的函数定义。

 
格式:declare -x var

格式:export var

将变量var设置成环境变量,这样在随后的脚本和程序中可以使用。

 

格式:declare -x var=value

格式:export var=value

将变量var设置陈环境变量,并赋值为value。

实例:
[root@web ~]#x=6/3
[root@web ~]#echo $x
6/3
[root@web ~]#declare -i x
[root@web ~]#echo $x    
6/3
[root@web ~]#x=6/3
[root@web ~]#echo $x
2

如果变量被声明成整数,可以把表达式直接赋值给它,bash会对它求值。

[root@jfht ~]#x=error
[root@jfht ~]#echo $x
0

如果变量被声明成整数,把一个结果不是整数的表达式赋值给它时,就会变成0.

[root@jfht ~]#x=3.14
-bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")
如果变量被声明成整数,把一个小数(浮点数)赋值给它时,也是不行的。因为bash并不内置对浮点数的支持。
[root@web ~]#

[root@jfht ~]#declare +i x

此命令的结果是取消变量x的整数类型属性。
[root@jfht ~]#x=6/3
[root@jfht ~]#echo $x
6/3

因为变量x不是整型变量,所以不会自动对表达式求值。可以采用下面两个方式。

[root@jfht ~]#x=$[6/3]
[root@jfht ~]#echo $x
2
[root@jfht ~]#x=$((6/3))
[root@jfht ~]#echo $x  
2