【发布时间】: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”中发生的事情有任何线索吗?