从cron运行脚本时遇到问题。首先我发现访问SQLite有困难;现在它的AWK命令让我发疯了。
有问题的一行是:
sens=`awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == "0")print $1 }' /usr/xbow/xserve/galtel/relasens`
不想打扰你的细节;它是while循环的主线,必须读取文件中列的值。它在命令行中运行良好,但作为cron作业运行不会给变量“sens”带来任何价值。
我已经检查过行内的所有变量都是OK(num,tipogalis等),所以我很确定这个问题与“&&”的数量有关。或者使用“打印”功能。
如果有人想提出有关环境变量的建议,我已经在剧本的开头添加了以下几行:
LANG=en_US.UTF-8
export LANG
但没有任何区别。
还有其他建议吗?我知道这个问题一定很小。魔鬼总是在细节......
答案 0 :(得分:0)
我假设您在cron中运行时已验证num
和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)
答案 1 :(得分:0)
最后,正确的方法是这个:
SENS = awk -F, '{ if($2 == '${num}' && $4 == '$tipogalis' && $9 == '0')print $1 }' /usr/xbow/xserve/galtel/relasens
但问题不在于此。我的电话是9美元,由于内部问题而永远不会等于'0'。
对不起这篇文章甚至可以完全删除,以免混淆其他用户。