Bash中的变量与传参

在sh文件中,总是要使用变量与传参的。

bash中变量,可直接赋值使用

比如:variableName=value,根据值决定是文本,还是数字;一般为当前shell的全局变量/环境变量,printenv 命令用于显示所有环境变量。

Bash
#三种变量赋值方式,=左右不能有空格,value有空格要使用引号
variableName=value
variableName='value' # 值为value本身,不再做解析
variableName="value" # 会先解析value里面的变量和命令,得到结果后,再赋值给variable

# 使用command执行的结果,赋值到变量,推荐$()方式,但只在bash中有效。
variableName=$(command) 
variableName=`command`

# 删除变量
unset variableName

两种变量引用方式:$variableName${variableName}${variableName}优点后面可以接其他字符。

子shell继承:export

变量未使用export时,只有当前shell可以使用,在子shell里不能使用。但使用export [选项] [变量名]=[值]后,子shell可以使用父shell的变量。
可用选项:

  • -p:列出当前所有环境变量。
  • -n:取消变量的导出,但变量仍在当前 Shell 中有效。
  • -f:将函数名导出为环境变量。
    注意:
  • export 的作用仅限于当前登录会话,退出后变量会失效。如果需要永久生效,可以将变量写入配置文件(如 ~/.bashrc 或 /etc/profile)。
  • 父 Shell 无法访问子 Shell 中定义的变量,即使使用 export。

变量也可以提前声明

在声明之后,对于不符合声明的赋值,会被忽略。

Bash
declare option variableName # option: `-r` 只读变量,`-i` 整数变量,`-` 一个数组变量,`-f` 函数,`-x` 通过环境声明并导出到后续命令。

示例:declare -i VN && VN=1 && VN=0.1 && echo $VN 的结果是1,不是0.1

本地变量/局部变量

local 是用于声明局部变量的关键字,在函数中,局部变量仅在该函数块内才有意义。
三种函数声明写法:

Bash
# 方式一
function funname () {
    local variableName
    local variableName=value
}
# 方式二
function funname {
    local variableName
    local variableName=value
}

#方式三
funname () {
    local variableName=value
    local variableName
}

#执行函数
funname [入参1] [入参2]

变量替换与提取

方式一

符号含义
${var}变量,界定范围
${var:-word}如果var为空或者未设定,返回word,var不变
${var:=word}如果var为空或者未设定,返回word,且var=word
${var:+word}如果var有值,返回word,var不变
${var:?word}如果变量var为空或者未设定,返回word并退出shell;word没有值则输出:parameter null or not set,用于检测var是否被正常赋值
${var-word}如果var未设定,返回word,如果var未空或者有值,返回var

方式二

符号含义
${var:num}返回var中第num个字符到末尾的所有字符。
若num为正数,从左边0处开始;
若num为负数,从右边开始提取字串,但必须使用在冒号后面加空格或一个数字或整个num加上括号,如${var: -2}${var:1-3}${var:(-2)}
${var:num1:num2}从var的第num1个位置开始,提取长度为num2的子串。num1是位置,num2是长度
${var/word1/word2}将var中第一个匹配到的word1替换为word2
${var//word1/word2}将var中所有word1替换为word2

bash 传参数引用

参数说明
$#传递到脚本或函数的参数个数
$1传递到脚本或函数的第一个参数值,同理类推$2~$9;但第10个就要书写为${10},和变量引用类似。
$*代表所有向脚本传递的参数字符串
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注