shell变量在字符中间 (shell变量等于占位符)

shell脚本不读取变量,shell变量替换字符串

当谈到shell编程时,变量和参数是两个非常重要的概念。在shell脚本中,你可以使用变量和参数来存储和操作数据,以及控制脚本的执行流程。本文将介绍shell变量和参数的各种用法和使用场景。

变量

在shell脚本中,变量是一个用于存储数据的名称。可以将变量看作是一个容器,用于存储各种类型的数据,例如字符串、数字和数组。你可以使用以下语法来定义和使用变量:

# 定义变量
var_name=value

# 使用变量
echo $var_name

在上面的代码中, var_name 是变量的名称, value 是变量的值。要使用变量,请在变量名称前加上 $ 符号。

变量类型

在shell中,变量的类型是动态的,这意味着变量的类型可以在运行时根据其值自动更改。你不需要在定义变量时指定其类型。

环境变量

在shell中,还有一类特殊的变量称为环境变量。环境变量是在shell启动时设置的变量,用于控制环境的行为。例如, PATH 是一个环境变量,用于指定可执行文件的搜索路径。你可以使用以下命令来查看当前设置的所有环境变量:

env

参数

在shell脚本中,你可以使用参数来传递数据到脚本中。参数是指在运行脚本时提供给脚本的值。在shell中,有两种类型的参数:位置参数和特殊参数。

位置参数

位置参数是指在脚本运行时提供给脚本的参数,这些参数按照它们提供的顺序进行编号。在shell中,你可以使用以下语法来访问位置参数:

$0 # 脚本名称
$1 # 第一个参数
$2 # 第二个参数
...

例如,如果你运行以下命令:

./myscript.sh arg1 arg2 arg3

那么在 myscript.sh 脚本中,你可以使用以下语法来访问这些位置参数:

echo $0 # 输出 "myscript.sh"
echo $1 # 输出 "arg1"
echo $2 # 输出 "arg2"
echo $3 # 输出 "arg3"

特殊参数

在shell中,还有一些特殊的参数,用于控制脚本的行为。以下是一些常用的特殊参数:

  • $#: 传递给脚本的参数数量。
  • $* 或 $@: 所有传递给脚本的参数,每个参数都用空格分隔。
  • $?: 上一个命令的退出状态码。
  • $: 当前进程的进程ID。
  • $!: 后台进程的进程ID。

使用场景

变量和参数在shell编程中有许多用途。以下是一些常见的使用场景:

  • 存储和操作数据:你可以使用变量来存储和操作各种类型的数据,例如字符串、数字和数组。
  • 控制脚本流程:你可以使用变量和参数来控制脚本的执行流程,例如循环和条件语句。
  • 传递数据:你可以使用参数来传递数据到脚本中,例如文件名和目录名。
  • 环境变量:你可以使用环境变量来控制shell环境的行为,例如搜索路径和语言设置。

总之,变量和参数是shell编程中非常重要的概念。熟练掌握这些概念将有助于你更好地编写和管理shell脚本。

各种应用场景通过案例分析

#!/bin/bash

# 变量:赋值和替换

a=375
hello=$a
#   ^ ^

#-------------------------------------------------------------------------
# 在初始化变量时,=符号两侧不允许有空格。
# 如果有空格会发生什么?

#  "VARIABLE =value"
#           ^
#% 脚本会尝试运行 "VARIABLE" 命令,带一个参数 "=value"。

#  "VARIABLE= value"
#            ^
#% 脚本会尝试运行 "value" 命令,
#+ 并将环境变量 "VARIABLE" 设置为空字符串。
#-------------------------------------------------------------------------


echo hello    # hello
# 不是变量引用,而只是字符串 "hello" ...

echo $hello   # 375
#    ^          这是一个变量引用。
echo ${hello} # 375
#               与上面一样,也是一个变量引用。

# 引用处理 . . .
echo "$hello"    # 375
echo "${hello}"  # 375

echo

hello="A B  C   D"
echo $hello   # A B C D
echo "$hello" # A B  C   D
# 可以看出,echo $hello 和 echo "$hello" 的结果不同。
# =======================================
# 引用变量会保留空白。
# =======================================

echo

echo '$hello'  # $hello
#    ^      ^
#  由单引号转义变量引用,使美元符号 "#34; 被字面解释。

# 注意引用的不同方式。

hello=    # 将其设置为 null 值。
echo "\$hello (null value) = $hello"      # $hello (null value) =
#  注意,将变量设置为 null 值与取消设置不同,尽管最终结果相同(参见下文)。

# --------------------------------------------------------------

# 如果用空格分隔,可以在同一行上设置多个变量。
#+ 不过这可能会降低可读性,并且可能不可移植。

var1=21  var2=22  var3=$V3
echo
echo "var1=$var1   var2=$var2   var3=$var3"

# 可能会与 "sh" 的旧版本有问题 . . .

# --------------------------------------------------------------

echo; echo

numbers="one two three"
#           ^   ^
other_numbers="1 2 3"
#               ^ ^
# 如果变量中嵌入了空格,则需要使用引号。
# other_numbers=1 2 3                  # 会给出错误信息。
echo "numbers = $numbers"
echo "other_numbers = $other_numbers"   # other_numbers = 1 2 3
# 转义空格也可以。
mixed_bag=2\ ---\ Whatever
#           ^    ^ 转义符 (\) 后有一个空格。

echo "$mixed_bag"         # 2 --- Whatever

echo; echo

echo "uninitialized_variable = $uninitialized_variable"
# 未初始化的变量具有 null 值(根本没有值!)。
uninitialized_variable=   # 声明,但不初始化它 --
                          #+ 与将其设置为 null 值相同,如上所述。
echo "uninitialized_variable = $uninitialized_variable"
                          # 它仍然具有 null 值。

uninitialized_variable=23       # 设置它。
unset uninitialized_variable    # 取消设置。
echo "uninitialized_variable = $uninitialized_variable"
                                # uninitialized_variable =
                                # 它仍然具有 null 值。
echo

exit 0

总结与注意事项

shell脚本不读取变量,shell变量替换字符串

通过上述实际脚本我们可以发现使用shell有很多注意事项,因此有必要单独拿出来总结下,当使用参数和变量时,需要注意以下几点:

  1. 变量名只能包含字母、数字和下划线,且必须以字母或下划线开头。
  2. 变量名区分大小写。
  3. 声明变量时,变量名和等号之间不能有空格。
  4. 如果变量值包含空格或特殊字符,需要使用引号(单引号或双引号)进行引用。
  5. 可以在同一行上设置多个变量,但是这可能会降低可读性,并且可能不可移植。
  6. 当访问变量时,需要在变量名前加上美元符号($)。
  7. 参数可以通过命令行传递给脚本,使用特殊变量($1、$2、$3...)来引用它们。
  8. 特殊变量($0、$@、$*、$#、$?、$)用于访问脚本本身、所有参数、所有参数作为单个字符串、参数数量、上一条命令的退出代码和当前进程的进程号等信息。
  9. 使用未初始化的变量会导致错误,应该在使用变量之前对其进行初始化。
  10. 尝试使用未声明的变量会导致错误,应该在使用变量之前声明它。
  11. 可以使用 unset 命令取消变量的设置。
  12. 在初始化变量时,=符号两侧不允许有空格。如果有空格,脚本会尝试运行命令,而不是将其作为变量名和值的分隔符。

常见错误包括:

  1. 拼写错误或语法错误。
  2. 忘记使用引号来引用包含空格或特殊字符的变量值。
  3. 使用未声明或未初始化的变量。
  4. 试图在变量名和等号之间添加空格。
  5. 忘记在变量名前加上美元符号($)。
  6. 错误地使用特殊变量或错误地引用参数。