1.Linux Shell中的变量

1. Shell变量类型

Shell是一种动态类型语言(不使用显式的数据声明)和弱类型语言(变量的类型操作根据需求而不同)。Shell中的变量是不分类型的(都是字符串类型),但是依赖于具体的上下文,Shell编程也允许比较操作和整数操作。

2. Shell变量的分类

Shell中有3种变量:用户变量、位置变量(Processing Parameter)、环境变量。

  1.用户变量:用户在Shell编程过程中定义的变量,分为全局变量和局部变量。默认情况下,用户定义的Shell变量为全局变量,如果要指定局部变量,则需使用local限定词。

  2.位置变量:位置变量也称系统变量或位置参数,是Shell脚本运行时传递给脚本的参数,同时也表示Shell脚本内部的函数参数。他们的名称是以数字命名(出于历史原因,直接引用的位置参数只能从0~9,即$0~$9,超过这个范围的必须用括号括起来,如${10}。特殊系统变量:$#(变量个数),$?(上条命令的结束值),$*(所有参数),$@(与S*同义)。注意:当S*和$@在""中时,他们的意义不同,"$*"值是一个字串,"$@"值是N个字串。

  3.环境变量:通常情况下,每个进程都有自己的“环境”,这个环境是由一组变量组成的,这些变量中存有进程可能需要引用的信息。在这种情况下,Shell与一般的进程没有什么区别。重要环境变量:PATH,HOME,LD_LIBRARAY_PATH(寻找库的路径)。

3. Shell变量的定义和引用

定义变量的语法:varname=value,如果变量值多于一个词,则必须用引号引起来。

引用变量值的语法:$varname、${varname}。$varname实际上是${varname}的简略形式。

${varname}这种形式允许我们使用Shell字符串操作的更多高级功能,如下:

替换运算符

变量运算符 替换
${varname:-word}

如果varname存在且非null,则返回varname的值;否则,返回word。

用途:如果变量未定义,则返回默认值。

${varname:=word}

如果varname存在且非null,则返回var那么的值;否则,将其置未word,然后返回其值。

用途:如果变量未定义,则设为默认值。

${varname:?message}

如果varname存在且非null,则返回varname的值;否则,打印message,并退出当前脚本。

用途:用于捕捉由于变量未定义而导致的错误。

${varname:+word}

如果varname存在且非null,则返回varname的值;否则,返回null。

用途:用于测试变量存在。

上表中的每个“:”都是可选的,如果省略“:”,则将每个定义中的“存在且非null”改为“存在”,即变量运算符只判断变量是否存在。

模式匹配运算符

变量运算符

替换

${varname#pattern}

如果pattern匹配varname的开头处,则删除匹配的最短部分,返回剩下的部分。

${varname##pattern}

如果pattern匹配varname的开头处,则删除匹配的最长部分,返回剩下的部分。

${varname%pattern}

如果pattern匹配varname的结尾处,则删除匹配的最短部分,返回剩下的部分。

${varname%%pattern}

如果pattern匹配varname的结尾处,则删除匹配的最长部分,返回剩下的部分。

${varname/pattern/string}

${varname//pattern/string}

将varname中匹配pattern的最长部分替换为srting。

第一种格式中,只有匹配的第一部分被替换;第二种格式中,varname中所有匹配的部分都被替换。

如果模式以为#开头,则必须匹配varname的开头,如果模式%开头,则必须匹配varname的结尾。

如果string为空,匹配部分被删除。

如果varname为@或*,操作被依次应用于每个位置参数,并且扩展为结果列表。  

4. 启动文件

Shell使用一些启动文件来协助创建一个运行环境。/etc目录下的文件提供全局设置,如果用户主目录下存在同名文件,它将覆盖全局设置。

不同Shell的启动文件

Korn Shell C Shell Bourne Shell Bourne-again Shell

/etc/environment

/ect/profile

$HOME/.profile

$HOME/.kshrc

/etc/environment

/etc/csh.cshrc

/etc/csh.login

$HOME/.cshrc

$HOME/.login

/etc/environment

/etc/profile

$HOME/.profile

/etc/environment

/etc/profile

/etc/bashrc

$HOME/.bash_profile

$HOME/.bashrc

  

  

原文地址:https://www.cnblogs.com/jason886/p/7107238.html