Shell 脚本 101:Shell 脚本中的变量

在 shell 脚本教程系列的这篇文章中,我们将学习如何在 shell 脚本中创建和使用变量。 我们将介绍系统为 Bourne Shell 提供的我们可以使用的不同变量,以及如何创建自定义变量以在整个 shell 脚本中使用。

shell 脚本中的变量用于存储您需要在整个脚本中经常使用的值。 这些变量可以通过用户输入、shell 参数设置,也可以直接嵌入到 shell 中。 除了您想要脚本的用途以及您认为您的用户将如何使用脚本之外,您没有固定的理由使用其中任何一个选项。

Shell 脚本中的变量是什么?

如果您熟悉任何编程语言,那么您之前就接触过甚至使用过变量。 与其他语言中的变量类似,shell 脚本中的变量用于存储数据以供以后使用的相同目的。

与类型化语言相比,您在 shell 脚本变量中观察到的一个区别是,您在设置变量时不需要声明变量类型。 系统会自动理解正在使用的变量的类型。

如何在 Shell 脚本中使用变量?

让我们从基础开始。 我们如何设置变量? 这很简单。 我们将使用赋值运算符“=” 为变量赋值,就像几乎所有编程语言的情况一样。

为变量赋值

我们将尝试将值分配给一个变量,一个不带空格,第二个带空格. 让我们看看输出。

[email protected]:~# name=HowLinux [email protected]:~# name = HowLinux 
Shell 脚本中的变量

如您所见,我们第二次遇到错误。 所以我们知道变量赋值中不能有空格。 我们已经从之前的很多教程中知道,Linux 是一个区分大小写的操作系统。 所以在上述情况下,变量 名称 不一样 名称.

打印出变量值

现在我们有一个分配给变量的值 名称 在上面的例子中,是时候使用它了。 我们将使用 echo 命令打印变量。 但是我们如何告诉 echo 命令打印变量的值,而不仅仅是我们在它后面键入的任何内容呢? 我们将使用 $ 使用时表示变量的符号。

让我们看看如果我们回显不带 $ 符号的变量名会发生什么。

[email protected]:~# echo name name [email protected]:~# echo $name HowLinux 
回显变量名称

将用户输入读入变量

要将用户输入读入变量,我们将使用 命令后跟不带 $ 符号的变量名称。

[email protected]:~# read name HowLinux User Input [email protected]:~# echo $name HowLinux User Input 
在 Shell 脚本中读取变量在 Shell 脚本中读取变量

保存和执行 Shell 脚本文件

在我们继续接受 shell 参数之前,我们将把 shell 脚本保存在一个 shell 文件中,然后可以使用传递给它的参数来执行该文件。

shell 脚本的文件扩展名是 .sh 很明显,它代表“shell”。 让我们将上面测试的脚本合并到一个文件中并运行它。

#!/bin/bash echo What is your name? read name echo Hello from HowLinux, $name.  

Save 上面的这个脚本为 输入.sh. 我们将使用 Linux 中的 chmod 命令 使 shell 脚本可执行。 这是可选的,因为我们也可以通过键入来执行脚本 bash input.sh.

[email protected]:~# chmod +x input.sh 

该脚本现在可以执行,无需 bash 命令,可以通过添加执行 ./ 在开头如下图所示。

[email protected]:~# ./input.sh What is your name? Ninad Hello from HowLinux, Ninad. [email protected]:~# 

伟大的! 现在我们知道如何保存和执行脚本了。 让我们开始理解一些系统变量,以及我们如何接受从终端传递给脚本的参数。

接受 Shell 脚本中的参数

现在的问题是,即使是我们的 输入.sh 脚本已经能够接受参数。 问题不只是关于接受,而是关于使用传递给它的参数。 因此,让我们看看如何使用在执行脚本时传递的参数。

由于在我们的 input.sh 中,我们将无法演示参数的用法,我们将首先创建一个新脚本,然后回到我们的 input.sh 并对其进行修改以接受名称作为参数。

#/bin/bash echo The script was called by using $0 echo First argument, $1 echo Second argument, $2 echo Third argument, $3 echo All arguments can be printed with [email protected] 

Save 上面的脚本为 参数.sh 并再次运行 chmod +x argument.sh 命令使脚本可执行。

[email protected]:~# ./argument.sh The script was called by using ./argument.sh First argument, Second argument, Third argument, echo All arguments can be printed with 

您可能会注意到, $0 系统变量告诉我们脚本是如何被调用的。 在这种情况下,我们只是通过执行脚本来调用它。 如果指定了整个路径,我们将得到包含整个路径的输出。 这 [email protected] 将所有参数存储在一起。

但是我们在这里没有传递任何参数。 让我们看看当我们传递一些参数时会发生什么。

参数 Shell 脚本参数 Shell 脚本

练习:修改 input.sh 脚本以接受名称作为参数而不是用户输入.

Shell 脚本中的特殊变量

在上面的文章中,我们看到了一些特殊的变量,它们可以用来访问传递给我们脚本的参数。 让我们看看可以在我们的脚本中使用的更多特殊变量。

  • $$ – 在后台运行时为您提供 shell 脚本的进程 ID。 当您创建可以并行运行多次的脚本时,这尤其有用。
  • $* – 如同 [email protected] 在功能上好像存储并让我们输出所有传递的参数。
  • $# – 获取传递给脚本的变量计数
  • 国际金融服务协会 – 此变量代表内部字段分隔符,它的作用是自动使用空格、制表符或换行符作为脚本输入的分隔符。 如果您在脚本中将此变量更改为任何其他分隔符,您的脚本将使用该字符作为分隔符来分解输入。

结论

这是一个 shell 脚本教程系列,我们会继续写更多关于 Linux 中 shell 脚本的文章。 我们希望您现在了解 shell 脚本中的变量是如何工作的并且也可以使用它们。 请记住,您可以在终端上执行的任何操作,都可以使用 shell 脚本完成,等等! 因此,您在我们之前的教程中学到的所有命令都可以结合使用变量来自动化一些日常任务。 让我们知道你想出了什么!