【问题标题】:Error in two scripts: "unary operator expected" and "integer expression expected"两个脚本中的错误:“预期一元运算符”和“预期整数表达式”
【发布时间】:2014-06-08 17:00:45
【问题描述】:

我编写了两个脚本,它们尝试以两种不同的方式执行相同的操作,但每次运行时都会出错。请您帮助纠正我的脚本并提高我的知识。我正在尝试在一个脚本中进行 vps 设置。以下两个脚本只是其中的一部分,每次都会出错。

1) 通过cpanel xml-api为openvz节点中的vps设置主机名的脚本

猫 vpstest.sh

#/bin/bash
hostname_status=`curl -sku root:PASSWORDHERE "https://ip.x.x.x:2087/xml-api/sethostname?hostname=server.domain.com" | awk -F"[<>]" '/status/{print $3}' | head -n1`
    if [ $hostname_status -eq 1 ]; then
      echo "Hostname set"
    else
      echo "Failed setting hostname"
    fi

输出:

# ./vpstest.sh
./vpstest.sh: line 3: [: -eq: unary operator expected
Failed setting hostname

2) 通过命令行在 openvz 节点中设置主机名的脚本

猫 vpstest1.sh

#!/bin/bash
hostname_status=`vzctl set containerID --hostname server.domain.com --save`
    if [ "$hostname_status" -eq 1 ] ; then
      echo "Hostname set"
    else
      echo "Failed setting hostname"
    fi

输出:

# ./vpstest1.sh
./vpstest1.sh: line 3: [: CT configuration saved to /etc/vz/conf/containerID.conf: integer expression expected
Failed setting hostname

有人可以帮助清除这些错误吗?

【问题讨论】:

  • 各位,我只是脚本的初学者。有人可以以最简单的方式帮助解释这些错误和更正吗?如果是这样,那对我真的很有帮助。
  • 您是否打算决定执行 vzctl 命令的返回值?
  • 嗨,我只打算这样,当 vzctl 命令成功时,它应该打印“主机名集”。
  • 试试这个:if vzctl set containerID --hostname server.domain.com --save;然后回显“成功”;否则回显“失败”; fi # 您在脚本中所做的是将命令输出写入变量,而不是返回值 - 当您立即对其进行操作时,无需将其显式存储在任何地方。
  • @Bushmills 好的兄弟,谢谢,我知道这是简单的方法。我想知道这是否是在 bash 脚本中检查“”如果命令成功则继续下一行“”的唯一方法。我们每次都只遵循这种方法吗?您对我的第一个脚本“vpstest.sh”和错误“[: -eq: unary operator expected”中发生的事情有任何线索吗?

标签: bash cpanel openvz


【解决方案1】:

首先,vzctl set containerID --hostname server.domain.com --save 的输出似乎不是整数值,而 -eq 仅用于在整数值之间进行比较。

这将解释以下错误:

integer expression expected

那么,您应该阅读有关the necessity (or not) to protect your variables with double quotes 的提醒。

这将解释以下错误,您可以使用类似:

./vpstest.sh: line 3: [: -eq: unary operator expected

如果你想检查一个命令的状态:

command >/dev/null 2>&1 && echo "success" || echo "fail"
# or
if command >/dev/null 2>&1; then
    echo "success"
else
    echo "fail"
fi

您还可以检查变量 $? 对应于上一个命令的状态(0 表示该命令成功或另一个整数值 1 在大多数情况下,或更多)。

【讨论】:

  • 感谢您的宝贵时间,但我没有完全了解它。请注意,我是 bash 脚本的初学者。能简单解释一下这两个错误吗?
  • @johnwilson 在这两种情况下,您都尝试将命令输出与值“1”进行比较,根据这些错误,在这两种情况下,您的两个命令都不会返回整数值。
  • @johnwilson -eq 只能与整数表达式一起使用,并且在使用test[ 时必须用双引号保护变量(与[[ 不同)。你应该阅读这个链接:stackoverflow.com/questions/19597962/bash-illegal-number/…
  • @johnwilson 很高兴为您提供帮助,但您的问题现在解决了吗?
  • 是的,我根据这里提到的几点在脚本中做了一些更正:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多