两个脚本出错:“一元运算符预期”和“预期的整数表达式”

时间:2014-06-08 17:00:46

标签: bash cpanel openvz

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

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

cat 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节点中通过命令行设置主机名的脚本

cat 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

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

1 个答案:

答案 0 :(得分:0)

首先,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的另一个整数值,或者更多)。