我编写了两个脚本,尝试以两种不同的方式执行相同的操作,但每次运行时都会出错。请您帮助纠正我的脚本并提高我的知识。我试图在一个脚本中进行vps设置。以下两个脚本只是其中的一部分,每次都会出错。
#/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
#!/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
有人可以帮助清除这些错误吗?
答案 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
的另一个整数值,或者更多)。