如何在bash中使用变量

如果您想编写脚本并理解要从web上剪切和粘贴的代码对Linux计算机的影响,那么变量是至关重要的。我们会让你开始的!...

如果您想编写脚本并理解要从web上剪切和粘贴的代码对Linux计算机的影响,那么变量是至关重要的。我们会让你开始的!

变量101

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

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

示例

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

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

me=Dave my_boost=Linux him=Popeye his_boost=Spinach this_year=2019

如何在bash中使用变量

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

echo $my_name echo $my_boost echo $this_year

如何在bash中使用变量

让我们同时使用所有变量:

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

如何在bash中使用变量

变量的值替换它们的名称。也可以更改变量的值。要给变量myu boost赋值,只需重复赋值时的操作,如下所示:

my_boost=Tequila

如何在bash中使用变量

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

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

如何在bash中使用变量

因此,可以使用引用相同变量的相同命令,如果更改变量中的值,则会得到不同的结果。

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

  • 单引号中的变量被视为文本字符串,而不是变量。
  • “引号中的变量”被视为变量。
  • 要获取变量中的值,必须提供美元符号$。
  • 没有美元符号$的变量只提供变量的名称。

如何在bash中使用变量

还可以创建一个变量,该变量的值来自现有变量或多个变量。下面的命令定义了一个名为drink\u of \u The \u Year的新变量,并将my\u boost和this\u Year变量的组合值赋给它:

drink_of-the_Year="$my_boost $this_year" echo drink_of_the-Year

如何在bash中使用变量

如何在脚本中使用变量

如果没有变量,脚本将完全无法运行。变量提供了灵活性,使脚本成为通用的解决方案,而不是特定的解决方案。为了说明这一区别,这里有一个脚本对/dev目录中的文件进行计数。

将其键入文本文件,然后另存为fcnt.sh公司(对于“文件计数”):

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

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

chmod +x fcnt.sh

如何在bash中使用变量

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

./fcnt.sh

如何在bash中使用变量

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

  • 定义了一个名为folder\ to\ count的变量,并将其设置为保存字符串“/dev”
  • 定义了另一个变量,称为file\u count。此变量的值来自命令替换。这是括号$()之间的命令短语。注意在第一个括号前有一个美元符号$。这个构造$()计算括号内的命令,然后返回它们的最终值。在本例中,该值被分配给file\u count变量。就file\u count变量而言,它传递了一个要保存的值;它不关心该值是如何获得的。
  • 在命令替换中计算的命令在文件夹\u to \u count变量中的目录上执行ls文件列表,该变量已设置为“/dev”。因此,脚本执行命令“ls/dev”
  • 此命令的输出通过管道传输到wc命令。l(行计数)选项使wc计算ls命令输出中的行数。由于每个文件都列在单独的一行中,因此这是“/dev”目录中文件和子目录的计数。此值被分配给file\u count变量。
  • 最后一行使用echo输出结果。

但这只适用于“/dev”目录。如何使脚本与任何目录一起工作?只需要一点零钱。

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

许多命令(如ls和wc)采用命令行参数。它们向命令提供信息,以便它知道您希望它做什么。如果希望ls在主目录上工作并显示隐藏文件,可以使用以下命令,其中tilde~和-a(all)选项是命令行参数:

ls ~ -a

我们的脚本可以接受命令行参数。第一个参数引用为$1,第二个参数引用为$2,依此类推,第九个参数引用为$9。(实际上,还有一个0美元,但这是保留的,以便始终保存脚本。)

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

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

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

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

下面是如何使脚本可执行的:

chmod +x fcnt2.sh

如何在bash中使用变量

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

./fnct2.sh /dev ./fnct2.sh /etc ./fnct2.sh /bin

如何在bash中使用变量

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

为了缩短脚本,您可以省去变量folder\u To\u count,整个过程只引用$1,如下所示:

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

使用特殊变量

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

以下是其他特殊预设变量:

  • $#:传递给脚本的命令行参数数。
  • $@:传递给脚本的所有命令行参数。
  • $?:要运行的最后一个进程的退出状态。
  • $$:当前脚本的进程ID(PID)。
  • $USER:执行脚本的用户的用户名。
  • $HOSTNAME:运行脚本的计算机的主机名。
  • $SECONDS:脚本已运行的秒数。
  • $RANDOM:返回一个随机数。
  • $LINENO:返回脚本的当前行号。

你想在一个剧本里看到所有这些,是吗?你可以!将以下内容另存为名为,特殊.sh:

#!/bin/bash echo "There were $# command line parameters" echo "They are: $@" echo "Parameter 1 is: $1" echo "The script is called: $0" # any old process so that we can report on the exit status pwd echo "pwd returned $?" echo "This script has Process ID $$" echo "The script was started by $USER" echo "It is running on $HOSTNAME" sleep 3 echo "It has been running for $SECONDS seconds" echo "Random number: $RANDOM" echo "This is line number $LINENO of the script"

键入以下内容使其可执行:

chmod +x special.sh

如何在bash中使用变量

现在,您可以使用一系列不同的命令行参数来运行它,如下所示。

如何在bash中使用变量

环境变量

Bash使用环境变量来定义和记录它在启动时创建的环境的属性。这些保存信息Bash可以随时访问,例如您的用户名、区域设置、历史文件可以保存的命令数、默认编辑器等等。

要查看Bash会话中的活动环境变量,请使用以下命令:

env | less

如何在bash中使用变量

如果您在列表中滚动,您可能会找到一些有用的脚本参考。

如何在bash中使用变量

如何导出变量

当一个脚本运行时,它在自己的进程中,并且它使用的变量在该进程之外是看不到的。如果要与脚本启动的另一个脚本共享一个变量,则必须导出该变量。我们将用两个脚本向您展示如何实现这一点。

首先,用文件名脚本保存以下内容_一个.sh:

#!/bin/bash first_var=alpha second_var=bravo # check their values echo "$0: first_var=$first_var, second_var=$second_var" export first_var export second_var ./script_two.sh # check their values again echo "$0: first_var=$first_var, second_var=$second_var"

这将创建两个变量,第一个变量和第二个变量,并分配一些值。它将这些输出到终端窗口,导出变量,并调用脚本_两个.sh.When脚本_两个.sh终止,并且进程流返回到此脚本,它再次将变量打印到终端窗口。然后,你可以看看他们是否改变了。

我们将使用的第二个脚本是脚本_两个.sh。这是那个脚本_一个电话. 键入以下内容:

#!/bin/bash # check their values echo "$0: first_var=$first_var, second_var=$second_var" # set new values first_var=charlie second_var=delta # check their values again echo "$0: first_var=$first_var, second_var=$second_var"

第二个脚本打印两个变量的值,为它们指定新值,然后再次打印它们。

要运行这些脚本,必须键入以下内容才能使其可执行:

chmod +x script_one.sh chmod +x script_two.sh

如何在bash中使用变量

现在,键入以下命令启动脚本_一个.sh:

./script_one.sh

如何在bash中使用变量

这是输出告诉我们的:

  • 脚本_一个.sh打印变量的值,即alpha和bravo。
  • 脚本_两个.sh在收到变量(alpha和bravo)时打印它们的值。
  • 脚本_两个.sh换成查理和德尔塔。
  • 脚本_一个.sh打印变量的值,仍然是alpha和bravo。

在第二个剧本里发生的事,留在第二个剧本里。这就像变量的副本被发送到第二个脚本,但是当脚本退出时它们被丢弃。第一个脚本中的原始变量不会被第二个脚本中的副本所发生的任何更改。

如何引用变量

您可能已经注意到,当脚本引用变量时,它们在引号中。这允许正确引用变量,因此在脚本中执行行时使用它们的值。

如果指定给变量的值包含空格,则在将空格指定给变量时,空格必须位于引号中。这是因为,默认情况下,Bash使用空格作为分隔符。

举个例子:

site_name=How-To Geek

如何在bash中使用变量

Bash认为“Geek”前面的空格表示新命令正在启动。它报告没有这样的命令,并放弃该行。echo告诉我们site\u name变量不包含任何内容,甚至包括“How To”文本。

用引号将值括起来,再试一次,如下所示:

site_name="How-To Geek"

如何在bash中使用变量

这一次,它被识别为单个值并正确地分配给site\u name变量。

echo是你的朋友

可能需要一些时间来习惯命令替换、引用变量以及记住何时包含美元符号。

在按Enter键并执行一行Bash命令之前,请在它前面使用echo进行尝试。这样,你就可以确定接下来发生的事情是你想要的。您还可以发现语法中可能犯的任何错误。

  • 发表于 2021-04-03 02:34
  • 阅读 ( 194 )
  • 分类:互联网

你可能感兴趣的文章

Windows10中LinuxBashShell快速指南

...更多的特性。了解更多关于Bash-on-Windows的信息,从您应该如何以及为什么安装它,到您可能不知道的隐藏特性。 ...

  • 发布于 2021-03-17 01:06
  • 阅读 ( 190 )

如何使用applescript将bash脚本转换为可单击的应用程序

...为输入运行它。这些特殊的应用程序被称为水滴。下面是如何创建一个: ...

  • 发布于 2021-03-21 09:39
  • 阅读 ( 246 )

关于linux中bash for loops的所有知识

... 第一行告诉运行这个程序的人如何运行它(即使用bash解释器)。第二个命令与您在命令行中输入的任何其他命令一样。将该文件另存为hello_世界.sh,然后: ...

  • 发布于 2021-03-29 06:22
  • 阅读 ( 307 )

如何使用受限shell来限制linux用户可以做什么

...改其目录,您可以控制他们可以访问哪些命令。下面介绍如何在Linux上设置受限shell。 受限炮弹 受限shell不是另一个shell。这是标准外壳的另一种模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下启动。在本文中,我们将...

  • 发布于 2021-03-31 10:57
  • 阅读 ( 383 )

如何使用chsh在linux上更改默认shell

Bash不是唯一的Linux shell。很容易尝试其他的shell,比如非常流行的Zsh。找到一个您喜欢的shell后,使用chsh命令将其设置为默认shell。我们会教你怎么做。 为什么贝壳很重要 shell位于您和操作系统之间。它在终端窗口内提供环境...

  • 发布于 2021-04-02 06:04
  • 阅读 ( 334 )

如何在linux上使用cd命令

...小又简单。 在使用Linux计算机的第一个小时内,您将学习如何使用Bash和其他shell附带的cd命令。也许您以前有在其他操作系统上使用它的经验,不需要解释。它会改变当前的工作目录,对吗?还有什么要知道的? 好吧,比你想象...

  • 发布于 2021-04-02 08:58
  • 阅读 ( 171 )

linux下如何使用which命令

...在shell中的,因此Bash不必费劲地查找这些命令。 但是Bash如何定位其他命令、程序和外部独立二进制文件呢?Bash使用路径,实际上是一组路径,每个路径指向一个目录。然后,它在每个目录中搜索与您试图运行的命令或程序匹配...

  • 发布于 2021-04-02 20:07
  • 阅读 ( 166 )

如何在bash中使用变量

...给它: drink_of-the_Year="$my_boost $this_year" echo drink_of_the-Year 如何在脚本中使用变量 如果没有变量,脚本将完全无法运行。变量提供了灵活性,使脚本成为通用的解决方案,而不是特定的解决方案。为了说明这一区别,这里有一个...

  • 发布于 2021-04-03 02:34
  • 阅读 ( 194 )

如何在linux上使用chroot命令

...法是安装足够的操作系统,以完成所需的任务。通过查看如何使用chroot环境来回答“what is required”问题。 一些常见用途是: 软件开发和产品验证。开发人员编写软件,产品验证团队(PV)对其进行测试。有时PV发现的问题无法...

  • 发布于 2021-04-03 03:19
  • 阅读 ( 193 )

如何在linux上创建别名和shell函数

...才能继续存在。一旦窗口关闭,别名将消失。 那么我们如何使我们的别名永久化呢? .bashrc文件和别名 您可能想知道预打包的别名是在哪里定义的。它位于主文件夹的“.bashrc”文件中。当您启动交互式shell时,将读取此文件并...

  • 发布于 2021-04-03 03:45
  • 阅读 ( 204 )
wqo11894
wqo11894

0 篇文章

相关推荐