以下 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
不是长度
我认为问题在于您认为
[
是某种 shell 语法,而不是命令。编写代码的另一种方法是说然后可能更明显的是,这是or命令
-z
的标志。[
test
您将命令的输出
grep
放入名为 的字符串中results
,然后创建一个名为 的单元素数组lines
,其中包含该字符串。想必你已经有了一些计划lines
,但目前这只是一种干扰。至于你的要点
[ -e ~/makt/current/log/production.log ]
可以告诉你该文件是否存在$results
总是存在的,当然它可能是空的,但你创建了它。${#results}
是字符数$results