【发布时间】:2015-05-27 15:48:14
【问题描述】:
我有以下 bash 脚本
#!/bin/bash
servers="server1.... server2...."
seconds="3" # value for servers to differ (in seconds)
now=$(date +%s)
for server in $servers
do
ssh -l root ${server} "( date +%s )" > /tmp/.tmpdate
echo "-" $(date +%s) >> /tmp/.tmpdate
difference=$(awk -F '-' '{if ($1-$2 < 0) { print $2-$1 } else { print $1-$2} }' /tmp/.tmpdate)
if [[ $difference -le $seconds ]] ; then
echo $server - IN SYNC
else
echo $server - NOT IN SYNC
fi
done
difference=$(awk -F '-' '{if ($1-$2 < 0) { print $2-$1 } else { print $1-$2} }' /tmp/.tmpdate) 行出现语法错误,导致脚本的其余部分不准确。有什么想法吗?
【问题讨论】:
-
提供 exact 错误会很有帮助。单独站立,
awk线路完美运行! (此外,应将 awk 问题标记为awk;它是一种单独的编程语言,不是 bash/shell 语法的一部分)。 -
...现在,这里还有一堆引用问题,其中一些是强制性的,因为将字符串 (
servers) 视为数组而不是使用真实的bash 数组,但除非您处理值中令人惊讶的数据,否则这些不会对您的直接问题负责。 -
尝试删除
-F和'-'分隔符之间的空格。到awk -F'-' '{if ($1-$2 < 0) { print $2-$1 } else { print $1-$2} }' /tmp/.tmpdate -
@QuoVadis,我很好奇——需要哪个实现? (我在 GNU awk 中测试了现有的 awk 命令是否可以工作)。
-
@CharlesDuffy sun0S ;-)。
标签: linux bash syntax scripting