深入了解 Shell 脚本语言中的 Linux“变量” - 第 9 部分
我们已经撰写了一系列有关Linux Shell 脚本的文章,这些文章当时受到了热烈欢迎,现在仍然具有重要意义。以下是有关 Shell 脚本的文章集链接。
在本文中,我们将看到变量、它的执行以及它在 shell 脚本中的实现。
保存输出
命令的输出可以重定向到标准输出或文件,也可以存储在变量中。如果命令的输出足够大,以至于无法容纳在屏幕上,我们只剩下将输出保存到文件或变量中的选项。将输出保存到变量的一个优点是检查速度更快。变量保存在内存中,因此与从文件检索相比,它往往更快。
脚本语言中的变量
变量是 Shell 脚本中使用的一个重要组件,使用 bash 命令“ Declare ”进行声明。要声明变量“ level ”,我们需要执行以下命令。
$ declare LEVEL
注意:我们需要使用“ typecast ”,这是用于兼容 korn shell 的内置语句。'declare' 更高级,包含所有功能,因此在使用 BASH 时建议使用。
规则
- 变量名必须证明在脚本中变量的使用。
- 强烈建议在整个程序中使用相同的变量名。
- 变量名可以是大写也可以是小写,但按照惯例,shell 命令是小写的,因此我们应该使用大写的变量名,以消除任何混淆。例如,TOTAL_BILLED_AMOUNT、SELL_REPORT、ORDER_RECEIPT 等。
执行
可以使用等号 ( = )为变量赋值。要将空字符串分配给变量,我们不能在等号后提供任何值。
$ LEVEL =
检查变量‘LEVEL’中存储的值。
$ printf "%i" $LEVEL
printf是大多数“ C ”程序员都知道的命令,用于打印数据。%i – 表示整数。我们可以根据需要将其替换为%c(表示字符)或%c (表示字符串)。
$LEVEL:请注意“ $ ”,它充当变量“ LEVEL ”的值替代器。
示例输出
$ printf "%i" $LEVEL 0
为变量分配一个值。
$ LEVEL=0
检查变量中存储的数据。
$ printf "%i" $LEVEL 0
注意:值得注意的是,在两种情况下,当我们没有为变量赋值时,以及当我们将值“ 0 ”分配给变量“ LEVEL ”时,输出都是0。虽然两种情况下的输出相同,但 shell 脚本对变量声明的处理方式不同。
为变量分配一个新值。
$ LEVEL=121
检查变量中存储的数据。
$ printf "%i" $LEVEL 121
取消设置变量
Declare是一个 BASH 命令,它仅在执行时创建变量。这样创建的变量将保留在内存中,直到脚本停止或变量被销毁。
$ unset LEVEL
BASH 中的预定义变量
BASH 预定义了50多个变量。其中一些变量对 BASH 具有特殊含义,例如,变量RANDOM输出一个随机数。如果取消设置然后再次定义,则原始变量值将永远丢失。因此建议不要使用任何系统定义的变量。
以下是一些有用的 BASH 变量的列表。
- BASH—Bash 的完整路径名。
- BASH_ENV—在 shell 脚本中,启动脚本之前执行的配置文件的名称。
- BASH_VERSION——Bash 的版本(例如,2.04.0(1)-release)。
- 列——显示屏上每行的字符数(例如,80)。
- HOSTNAME — 计算机的名称。在某些版本的 Linux 中,这可以是机器名称。在其他版本中,它可以是完全限定域名。
- HOSTTYPE——计算机的类型。
- HOME——您的主目录的名称。
- OSTYPE——操作系统的名称。
- PATH——以冒号分隔的搜索路径列表,用于查找要执行的命令。
- PPID——shell 父进程的进程 ID。
- PROMPT_COMMAND—在设置 PS1 主提示字符串之前执行的命令。
- PWD——当前工作目录(由 cd 命令设置)。
- RANDOM—每次引用时返回 0 至 32767 之间的随机数。
- SHELL—首选使用的 shell;适用于为您启动 shell 的程序。
- TERM——终端仿真类型(例如,控制台)。
分词规则。
$ LEVEL=0 $ printf "%i" $LEVEL 0 AND $ LEVEL=”0” $ printf "%i" $LEVEL 0
两种情况下的输出都相同。那么使用引号时结果有什么不同呢?
让我们用不同的变量数据来检查同样的情况。
$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5 bash: 1: command not found bash: 2: command not found bash: 3: command not found bash: 4: command not found bash: 5: command not found
$ printf "%i" $LEVEL 0
更不用说,输出是错误的。BASH 将 ' 0 ' 后面的空格视为终止符,因此变量的值设置为 ' 0 '。现在我们尝试使用引号来引用变量,如下所示。
$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5” $ printf "%s" $LEVEL 0;1;2;3;4;5
结果仍然不正确。BASH 获取变量值并删除它们之间的所有空格。因此printf不会将 0、1、2、3、4、5 解释为不同的值。那么解决方案是什么?
printf "%s" "$LEVEL" 0 ; 1 ; 2 ; 3 ; 4 ; 5
是的!将变量替换放在引号下是解决方案。引号将 shell 中的字符分组,并以有意义的方式解释特殊字符。
引文可以连续使用,并且用引号括住变量替换是个好主意。此外,它还可用于将整体文本与引文分开。以下是一个例子。
$ LEVEL=5 $ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." $ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”
用空格分隔引用的文本块会导致与上面讨论的相同的问题。bash 会将空格视为终止符。另一种变量替换方法是。
$ LEVEL=5 $ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." $ printf “%s” "$FLAG_MESSAGE" “I HAVE CLEARED LEVEL 5. I Deserve appreciation.”
单引号限制 BASH 打印特殊字符。
$ printf “%s” '$FLAG_MESSAGE' “$FLAG_MESSAGE”
反斜杠 (/)
反斜杠的作用相当于一个字符的单引号。你想过如何打印(“)吗?
$ printf "%c" "\""
当%q与printf组合使用时,在每个单词后提供反斜杠以确保单词间距。
$ LEVEL=5 $ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." $ printf “%q” "$FLAG_MESSAGE" “I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”
目前就这些了。我们总是试图不时为读者提供对他们有用的文章。上面涵盖的文章内容很丰富,因此其余主题和示例将在下一篇文章中提供,其中包括“变量的属性”、“变量导出”等。
在此之前,请继续关注并关注Example.com。不要忘记在下面的评论部分向我们提供您宝贵的反馈。