网站搜索

深入了解 Shell 脚本语言中的 Linux“变量” - 第 9 部分


我们已经写了一系列关于Linux Shell 脚本的文章,当时受到热烈欢迎,即使现在也很有意义。以下是有关 shell 脚本编写的文章集的链接。

  1. 学习 Linux Shell 脚本

在本文中,我们将看到变量、它的执行以及它在 shell 脚本中的实现。

保存输出

命令的输出可以重定向到标准输出或文件,也可以存储在变量中。如果命令的输出足够大,以至于不适合屏幕,我们只能选择将输出保存到文件中的变量中。将输出保存到变量的优点之一是检查速度更快。变量被保存到内存中,因此与从文件中检索相比,它往往会更快。

脚本语言中的变量

变量是 Shell 脚本中使用的重要组件,使用 bash 命令“Declare”进行声明。要声明一个变量“level”,我们需要执行以下命令。

declare LEVEL

注意:我们需要使用“typecast”,这是一种用于 korn shell 兼容性的内置声明。 “declare”更高级,包含所有功能,因此在使用 BASH 时建议使用。

规则
  1. 变量名称必须证明脚本中变量的使用合理。
  2. 强烈建议在整个程序中使用相同的变量名称。
  3. 变量名称可以是大写也可以是小写,但按照惯例 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 变量的列表。

  1. BASH—Bash 的完整路径名。
  2. BASH_ENV—在 shell 脚本中,在脚本启动之前执行的配置文件的名称。
  3. BASH_VERSION - Bash 的版本(例如 2.04.0(1)-release)。
  4. 列 - 显示屏上每行的字符数(例如 80)。
  5. 主机名 - 计算机的名称。在某些版本的 Linux 下,这可以是机器名称。在其他情况下,它可以是完全限定的域名。
  6. HOSTTYPE——计算机类型。
  7. HOME——您的主目录的名称。
  8. OSTYPE——操作系统的名称。
  9. PATH - 以冒号分隔的搜索路径列表,用于查找要执行的命令。
  10. PPID——shell 父进程的进程 ID。
  11. PROMPT_COMMAND - 在设置 PS1 主提示字符串之前执行的命令。
  12. PWD - 当前工作目录(由 cd 命令设置)。
  13. RANDOM - 每次引用时返回 0 到 32767 之间的随机数。
  14. SHELL——首选使用的 shell;用于为您启动 shell 的程序。
  15. 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" "\""

%qprintf组合时,在每个单词后提供反斜杠以确保单词间距。

LEVEL=5

FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

目前为止就这样了。我们总是尽力为读者提供时不时有用的文章。上面涵盖的文章内容很丰富,因此其余主题和示例将在下一篇文章中生成,其中包括“变量属性”、“变量导出”等。

在此之前,请继续关注并连接到 linux-console.net。不要忘记在下面的评论部分向我们提供您的宝贵反馈。