在 Bash 脚本中执行变量中的命令
本篇文章是关于将 Bash 命令存储在一个变量中,然后直接从这个变量中执行它。 首先,我们将讨论执行变量中包含的命令的多种方法,然后是几个脚本示例。
让我们开始吧。
Bash 脚本变量
变量是 Bash 支持的一项基本功能。 无论您是在 if 控制结构、case 结构中还是在脚本中使用它们,它们不仅可以整理您的脚本,还可以让您更容易理解它们。
您还可以将它们作为脚本运行,当您通过管道传输许多命令并且命令很长时,这会让生活变得特别轻松。 这将减少你的脚本的长度,它可能是一百个字长到一个,甚至可能不是十几个字长。
想象一下调试一个一百字长的脚本与一个不到十几个字长的脚本; 考虑您可以节省的时间。
有时,我们需要编写 Bash 包装器,从用户那里获取命令,将它们存储到变量中,并在应用一些业务逻辑(可能是一系列 if-else 决策)后有条件地运行其中的一些命令。 现在,在这些场景中,我们需要查看可以帮助我们解析和解释存储在变量中的命令以将其作为 Bash 命令运行的方法。
在这里,我们将讨论一些运行变量中包含的命令的最有效方法。
在 Bash 脚本中使用 Eval 命令执行变量中的命令
某些 Bash 脚本要求您使用输入值或变量(例如)构建一个字符串,并在最后将其作为命令运行。 eval 命令是这些情况下的答案。
要像 shell 命令一样评估参数,请使用 Bash eval 命令。
shell 命令接收一串参数并使用该字符串来执行命令。 然后通过 eval 在当前 shell 中执行该命令。
此命令在执行使用特定运算符或保留项的命令时很有用。
语法:
eval [arguments...]
参数被传递给这个命令,组合成一个字符串文字,然后发送给 Bash 执行。 此命令在执行命令后返回退出状态。
如果没有参数传递给此命令或传递了 null,则它返回 0 作为退出状态。
示例 1:计算文件中的单词数。
假设我们有一个包含几行文本的文件 mysample.txt。 如果我们必须计算该文件中的单词数,我们可以使用 wc -w 命令。
我们将使用 eval 命令执行此任务。 Bash 脚本将是:
#!/bin/bash
wordcount="wc -w mysample.txt"
eval $wordcount
让我们看看它的输出:
示例 2:使用多个变量构建命令。
假设我们需要打印一条语句 Welcome to Eval Command。 我们可以使用 eval 命令来做到这一点:
#!/bin/bash
var1="Welcome to Eval Command"
comm1="echo"
eval $comm2 $var1
在此脚本中,我们创建了两个变量,一个包含要打印的消息,另一个包含 echo 命令。 我们将这两个变量传递给 eval 命令,它会相应地构建整个命令。
执行此脚本后,我们将得到以下输出:
示例 3:打印变量的值。
在下面的示例中,我们将打印包含另一个变量的变量的值。
#!/bin/bash
str1="my script"
str2= str1
comm="echo "
eval $comm '$str2'
上述脚本的输出将是:
示例 4:打印数字的总和。
在下面的示例中,我们将使用脚本中的 for 循环打印 1 到 4 范围内数字的总和。 然后我们将使用 eval 命令打印该总和。
这个问题的脚本是:
#!/bin/bash
sum=0
for n in {1..4}
do
sum=$(($sum+$n))
done
comm="echo 'The result of sum from 1-4 is: '"
eval $comm $sum
上述脚本的输出将是:
使用带有 -c 标志的 bash 在 Bash 脚本中的变量中执行命令
默认情况下,bash 命令解释器从标准输入或文件中读取命令并执行它们。 但是,如果设置了 -c 标志,bash 解释器会从第一个字符串参数(它应该是一个非选项参数)读取命令。
因此,我们可以使用它来执行存储在 Bash 字符串变量中的命令。
例如,以下脚本首先将 ls 命令字符串分配给 COMMAND 变量。 然后,它使用带有 -c 命令的 bash 解释器来使用 COMMAND 变量作为输入。
#!/bin/bash
COMMAND="ls"
bash -c $COMMAND
上面的命令会列出脚本文件当前工作目录下的所有目录和文件。
在 Bash 脚本中使用命令替换 $() 执行变量中的命令
我们可以使用命令替换方法来运行存储在变量中的命令:
#!/bin/bash
COMMAND="ls"
$(echo $COMMAND)
相关文章
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:109 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:86 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:133 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:84 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:350 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:75 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。