以下 bash 脚本尝试读取文件并搜索给定的字符串。 在这种情况下,案件应该产生积极的结果 如果长度为零,即未找到字符串,则使用 Postfix 发送电子邮件(仅发送)。
#!/bin/bash
results=$(grep "Parameters: {\"id_at_chain\"=>\"001142\", \"articles\"" ~/makt/current/log/production.log)
lines=($results)
if [ -z "$results" ]; then
echo "array articles 001142 missing" | mail -s "problem 001142" [email protected] [email protected]
fi
我想要做的是放置一些验证代码来测试(并可能转储到日志文件):
• 是否找到该文件
• 是否$results
存在
• 的长度$results
我可以echo $results
并且它给出了预期的结果,但是
echo -z "$results"
似乎输出的$results
不是长度
答案1
我认为问题在于您认为[
是某种 shell 语法,而不是命令。编写代码的另一种方法是说
if test -z "$results" ; then
然后可能更明显的是,这是or命令-z
的标志。[
test
您将命令的输出grep
放入名为 的字符串中results
,然后创建一个名为 的单元素数组,lines
其中包含该字符串。想必你已经有了一些计划,lines
但目前这只是一种干扰。
至于你的要点
[ -e ~/makt/current/log/production.log ]
可以告诉你该文件是否存在$results
总是存在的,当然它可能是空的,但你创建了它。${#results}
是字符数$results