Bash脚本条件

时间:2018-03-26 20:36:02

标签: linux bash shell if-statement multiple-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

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

1 个答案:

答案 0 :(得分:3)

您的情况将始终为真,因为如果[ -s file.txt ]失败,则|| - 列表的退出状态为echo的退出状态,几乎保证为0。您希望将echo移出条件并进入if语句的正文。 (为了进一步简化,只需将正文设置为变量,并在swaks完成后调用if

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"