Bash 脚本条件

Bash Script Conditions

我正在构建一个 bash 脚本来根据上一个命令发送电子邮件。我似乎遇到了困难。在脚本之外,该命令工作正常,但将其放入脚本时,它不会给出所需的结果。

这是脚本片段:

grep -vFxf /path/to/first/file /path/to/second/file > /path/to/output/file.txt 
if [ -s file.txt ] || echo "file is empty";
then
          swaks -t "1@email.com" -f "norply@email.com" --header "Subject: sample" --body "Empty"
else
          swaks -t "1@email.com" -f "norply@email.com" --header "subject: sample" --body "Not Empty"
fi

我 运行 脚本外的命令,我可以看到有数据,但是当我在脚本内添加命令时,我得到空输出。请指教 。提前谢谢你。

你的条件永远为真,因为如果[ -s file.txt ]失败,||-list的退出状态就是echo的退出状态,几乎可以保证是0. 您想将 echo 移出条件并移至 if 语句的主体中。 (为了进一步简化,只需将正文设置为一个变量并在 if 完成后调用 swaks

if [ -s file.txt ];
then
    body="Not Empty"
else
    echo "file is empty"
    body="Empty"
fi
swaks -t "1@email.com" -f "norply@email.com" --header "subject: sample" --body "$body"

如果你创建file.txt的唯一原因是检查它是否为空,你可以直接将grep命令放在if条件中:

if grep -vFxfq /atph/to/first/file /path/to/second/file; then
    body="Not Empty"
else
    echo "No output"
    body="Empty"
fi

swaks -t "1@email.com" -f "norply@email.com" --header "subject: sample" --body "$body"