当前位置: 首页 > 知识库问答 >
问题:

bashshell脚本-从控制台获取字符串并将其存储到变量中

那正初
2023-03-14

我正在执行一些从控制台生成字符串的操作,例如,我正在执行以下操作:

./eqagent 添加目标目标类型=kafka 事件-服务器=本地主机:9999

并得到这个消息:

均衡代理返回以下错误: 代理目标已存在

我想捕捉它,把它存入一个变量,然后用if语句把它作为一个条件。

共有3个答案

沃阳曜
2023-03-14

你能不能这样做:

variable=`your-command`

然后使用$variable做任何你想做的事情

云令
2023-03-14

试试这个 :

message=$(./eqagent add-target target-type=kafka events-servers=localhost:9999 2>&1)

varname=$(某些命令)语法称为命令替换,并扩展为由括号中包含的命令生成的字符串

<代码>2

如果您只想测试成功或失败,您可以使用命令的返回代码,如下所示:

if
  ./eqagent add-target target-type=kafka events-servers=localhost:9999 2>&1
then
  # Success!
else
  # Failure...
fi

返回代码也可以在特殊的shell变量$中使用 如果在命令执行后立即调用,则vy约定成功时为零,失败时为非零值。

赵献
2023-03-14

在我看来,你的问题就像一个典型的X-Y问题:你的问题是,你想在命令失败时采取行动,当这种情况发生时,它会将返回值设置为非零值。那么,您实际想要的是使用<code>$ 变量。下面是您的用例的一般化示例:

$ ./command
Argh... Failure!
$ echo $?
1

所以你可以做:

if [ $? -eq 1 ]; then
    echo "It failed :("
fi

您可能有几个返回值来区分错误,因此您可以检查等于23255的值。

但是你的外壳允许你以更简洁的方式做到这一点:

# prints 'it failed :(' only when command's result ($?) is non-null
./command || echo "it failed :("

因此,对于您的示例,您应该能够使用以下方法完成:

./eqagent add-target target-type=kafka events-servers=localhost:9999 || echo "it failed :("

如果您的命令真的只使用字符串返回错误状态(不太好),您可以使用以下命令检查确切的字符串:

output=$(./eqagent add-target target-type=kafka events-servers=localhost:9999)
if [ "$output" == "Equalum agent has returned the following error: The agent target already exists" ]; then
    echo "it failed :("
fi

最后,您可以检查是否包含子字符串(如果这不是程序的唯一输出):

error_msg="The agent target already exists"
if [ -z "${output##*$error_msg*}" ] ;then
    echo "it failed :("
fi

以上语法适用于大多数shell(bash、ksh、dash…)。

如果您在< code>$output变量中没有得到预期的输出(如果程序在stderr而不是stdout上打印错误,这种情况很可能发生),您可以使用以下技巧连接两个输出:

output=$(./eqagent add-target target-type=kafka events-servers=localhost:9999 2>&1)

最后,在实际用例中,您可能需要两者的混合:

error_msg="The agent target already exists"
output=$(./eqagent add-target target-type=kafka events-servers=localhost:9999)
if [ $? -ne 0 ]; then
    echo -n "it failed "
    if [ -z "${output##*$error_msg*}" ] ;then
        echo "; because target already exists. :-s"
    else
        echo ":-("
    fi
fi
 类似资料:
  • 问题内容: 在“全局属性”中的Jenkins配置(http:// JenkinsURL/configure)中,我定义了一些“环境变量”。 如何在Groovy脚本控制台(http:// JenkinsURL / script)中访问它们? 我试图找到合适的解决方案(例如:[在Jenkins构建步骤(Windows)中从groovy脚本访问构建环境变量中]提到的解决方案),但似乎它们都不适合我。 我

  • 在“全局属性”中的 Jenkins 配置 (http://JenkinsURL/configure) 中,我定义了一些“环境变量”。 如何在Groovy脚本控制台(http://JenkinsURL/script)中访问它们? 我试图找到合适的解决方案(例如:在Jenkins构建步骤(Windows)中从groovy脚本中访问构建环境变量),但似乎没有一个适合我。 我尝试过例如: 和 和 和

  • 对于我正在学习的一门在线课程,我正在尝试保存我定义为变量的第二组整数、双倍和字符串,在使用扫描器读取它们(第二组)之后。问题是我不知道如何处理我定义的第二组变量。我尝试将它们实例化为一个新变量,但我总是遇到错误。我需要帮助读取每个变量,然后保存它们。

  • 问题内容: 当我尝试从使用PyQt5 Designer创建的qtextedit中获取文本时,出现错误或“ Python停止工作”,并且脚本自动停止。我尝试了多种解决方案,但没有任何效果。我必须将文本从qtextedit分配给变量,以检查进程是否运行。那是PyQt5生成的代码: 此处的按钮代码: 这里的代码用于从文本框中获取文本并分配给变量: 结束码: 问题答案: 没有任何方法,如果要获取必须使用的

  • 问题内容: 我们如何从文本文件读取数据并将其存储在String变量中? 是否有可能在方法中传递文件名,并且它将返回字符串,即文件中的文本。 我必须导入哪种工具?声明列表会很棒。 问题答案: 这些是必需的进口: 这是一种方法,通过将文件名作为参数传递给它,您可以从文件中进行读取,如下所示:

  • 我为这个问题搜索了很多,但在任何地方都找不到可行的解决方案。有人能帮我吗?我想通过jenkins脚本控制台获取现有的环境变量值。