从cron运行脚本时遇到问题。首先,我发现访问SQLite很困难;现在是AWK命令让我抓狂。
有问题的代码是这样的:
sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens`我不想用细节来打扰您;这是while循环的主行,它必须读取文件中列的值。它从命令行运行得很好,但是作为cron作业运行时没有为变量"sens“赋值。
我已经检查了行中的所有变量都是read OK (num,tipogalis等),所以我非常确定这个问题与"&&“的数量或"print”函数有关。
为了防止有人想对环境变量提出一些建议,我已经在脚本的开头添加了以下几行:
LANG=en_US.UTF-8
export LANG但没有什么不同。
还有其他的建议吗?我知道这个问题一定很小。魔鬼总是在细节中。
发布于 2012-04-11 21:22:18
我假设您已经验证了在num中运行cron时,cron和tipogalis变量保存了正确的值。
我猜您在awk if语句中的常量两边缺少引号。
sens=`awk -F, '{ if($2 == "'${num}'" && $4 == "'$tipogalis'" && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens`我将使用-v选项将值传递给awk,而不是将引号拼凑在一起。
sens=$(awk -F, -v val2="$num" -v val4="$tipogalis" '$2 == val2 && $4 == val4 && $9 == "0" {print $1}' /usr/xbow/xserve/galtel/relasens)发布于 2012-04-12 19:40:41
最后,正确的方法是:
sens=awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == '0')print $1 }' /usr/xbow/xserve/galtel/relasens
但问题不在于产品线。由于一个内部问题,我的电话被打到了一个永远不会等于'0‘的$9。
对不起。这篇文章甚至可以完全删除,以避免让其他用户感到困惑。
https://stackoverflow.com/questions/10105919
复制相似问题