linux变量相关总结
shell中有3种变量:用户变量,位置变量,环境变量
用户变量:用户在shell编程过程中定义的变量,分为全局变量和局部变量,用户在定义变量是默认为全局变量,若定义局部变量需要使用local限定词。
(:启动子shell,):终止子shell。
变量的表示方式$varname实际上是用语法${varname}的简略形式。
位置变量:也称系统变量,位置参数,是shell脚本运行时传递给脚本的参数,同时也表示在shell函数内部的函数参数。
函数复用是优质代码的一大特征。
shell命令执行顺序:别名——关键字——函数——内部命令——外部命令。
exit退出脚本,return退出函数,如果函数没有return语句,则函数返回状态是最后一个命令状态,每一条语句或函数都会返回一个状态。
如果函数保存在其它文件中,可以用source或dot命令将他们装入当前脚本
自作命令:先在一个文件里写一个函数,然后再当前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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。