首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在 Bash 中使用变量

如果您想编写脚本并了解您将要从 Web 剪切和粘贴的代码会对您的 Linux 计算机产生什么影响,变量至关重要。我们将帮助您开始!

变量 101

变量是表示字符串或数值的命名符号。在命令和表达式中使用它们时,它们将被视为键入了它们所包含的值而不是变量的名称。

要创建变量,只需为其提供名称和值。您的变量名称应该是描述性的,并提醒您它们所包含的值。变量名称不能以数字开头,也不能包含空格。但是,它可以以下划线开头。除此之外,您还可以使用大小写字母数字字符的任意组合。

Bash 变量示例

在这里,我们将创建五个变量。格式是键入名称、等号和值。请注意,等号之前或之后没有空格。为变量赋值通常称为为变量赋值。=

我们将创建四个字符串变量和一个数值变量,

my_name=Dave

my_boost=Linux

him=Popeye

his_boost=Spinach

this_year=2019

若要查看变量中保存的值,请使用该命令。每当引用变量名称包含的值时,都必须在变量名称前面加上美元符号,如下所示:echo$

echo $my_name

echo $my_boost

echo $this_year

让我们一次使用所有变量:

echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"

变量的值将替换其名称。您还可以更改变量的值。要为变量赋值,只需重复赋值时执行的操作,如下所示:my_boostmy_boost=Tequila

如果重新运行上一个命令,现在会得到不同的结果:

echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"

因此,您可以使用引用相同变量的相同命令,并在更改变量中保存的值时获得不同的结果。

我们稍后将讨论引用变量。现在,请记住以下几点:

单引号中的变量被视为文本字符串,而不是变量。'

引号中的变量被视为变量。"

要获取变量中保存的值,您必须提供美元符号。$

没有美元符号的变量仅提供变量的名称。$

您还可以创建一个变量,该变量的值取自现有变量或变量数量。以下命令定义一个名为的新变量,并为其分配 和 变量的组合值:drink_of_the_Year,my_boostthis_year

drink_of-the_Year="$my_boost $this_year"

echo drink_of_the-Year

如何在脚本中使用 Bash 变量

没有变量,脚本将完全被束缚。变量提供了使脚本成为通用解决方案而不是特定解决方案的灵活性。为了说明差异,下面是一个对目录中的文件进行计数的脚本。/dev

在文本文件中键入以下内容,然后将其另存为(对于“文件计数”):fcnt.sh

#!/bin/bashfolder_to_count=/devfile_count=$(ls $folder_to_count | wc -l)echo $file_count files in $folder_to_count

在运行脚本之前,必须使其可执行,如下所示:

chmod +x fcnt.sh

键入以下内容以运行脚本:

./fcnt.sh

这将打印目录中的文件数。以下是它的工作原理:/dev

定义了一个名为的变量,并将其设置为保存字符串“/dev”。folder_to_count

定义了另一个称为 的变量。此变量从命令替换中获取其值。这是括号之间的命令短语。请注意,第一个括号前有一个美元符号。此构造计算括号内的命令,然后返回其最终值。在此示例中,该值分配给变量。就变量而言,它传递了一个要保存的值;它不关心如何获得值。file_count$( )$$( )file_countfile_count

在命令替换中计算的命令在变量中的目录上执行文件列表,该目录已设置为“/dev”。因此,脚本执行命令“ls /dev”。lsfolder_to_count

此命令的输出通过管道传递到命令中。(行计数)选项会导致计算命令输出中的行数。由于每个文件都列在单独的行上,因此这是“/dev”目录中的文件和子目录的计数。此值分配给变量。wc -lwclsfile_count

最后一行使用回显输出结果。

但这仅适用于“/dev”目录。我们如何使脚本适用于任何目录?只需要一个小的改变。

如何在脚本中使用命令行参数

许多命令(如 和)都采用命令行参数。这些为命令提供信息,因此它知道您希望它执行什么操作。如果要处理主目录并显示隐藏文件,可以使用以下命令,其中波浪号和(all)选项是命令行参数:lswcls~-a

ls ~ -a

我们的脚本可以接受命令行参数。它们被引用为第一个参数,作为第二个参数,依此类推,直到第九个参数。(实际上,也有一个 ,但它保留用于始终保存脚本。$1$2$9$0

您可以在脚本中引用命令行参数,就像引用常规变量一样。让我们修改我们的脚本,如下所示,并使用新名称保存它:fcnt2.sh

#!/bin/bashfolder_to_count=$1file_count=$(ls $folder_to_count | wc -l)echo $file_count files in $folder_to_count

这一次,为变量分配了第一个命令行参数的值。folder_to_count$1

脚本的其余部分与以前完全相同。您的脚本现在不是特定的解决方案,而是通用解决方案。您可以在任何目录上使用它,因为它不是硬编码为仅与“/dev”一起使用的。

下面介绍了如何使脚本可执行:

chmod +x fcnt2.sh

现在,尝试使用几个目录。您可以先执行“/dev”以确保获得与以前相同的结果。键入以下内容:

./fnct2.sh /dev

./fnct2.sh /etc

./fnct2.sh /bin

对于“/dev”目录,您会得到与以前相同的结果(207 个文件)。这是令人鼓舞的,您可以获得其他每个命令行参数的目录特定结果。

要缩短脚本,您可以完全省略变量 、 ,而只引用整个脚本,如下所示:folder_to_count$1

#!/bin/bash file_count=$(ls $1 wc -l) echo $file_count files in $1

使用特殊变量

我们提到了 ,它始终设置为脚本的文件名。这允许您使用脚本执行诸如正确打印其名称之类的操作,即使它已重命名也是如此。这在日志记录情况下很有用,在这种情况下,您想知道添加条目的进程的名称。$0

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OLpFc-xrmgilsYzSJH_kVykA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券