首页 > 解决方案 > Bash 脚本 - 如果总是打印 else

问题描述

我正在尝试在 bash 中创建一个脚本来检查我的 rdiff-backup 今天是否已经运行,但是我的第二个if没有工作。

rdiff() {

#Get day
date=$(date +%d)

x=0

#Treat day
if [ "$date" -le "09" ]; then
        date=$(date +%d | cut -c2)
else
        date=$(date +%d)
fi

#Run rdiff to check if it has run today and return 0 or 1
output="$(rdiff-backup -l folder/b/1_backup | grep " $date "; echo $?)"

#Echo output for testing only
echo "${output}"

#If true, x++
if [ "$output" == "0" ]; then
x=$((x+1))
printf $x"\n"
printf true"\n"

#If false, prints false
elif [ "$output" == "1" ]; then
printf false"\n"

#If anything else, do nothing
else
echo ???
fi

}
rdiff
exit 0

它总是打印我的else. 我究竟做错了什么?

抱歉,我是 bash 脚本的新手。

Bash 版本:GNU bash,版本 4.4.23(0)-release (amd64-portbld-freebsd11.1)。

标签: bash

解决方案


问题是您的变量除了退出代码之外还包含日期。

您可以使用以下命令摆脱 grep 输出grep -q

output="$(rdiff-backup -l folder/b/1_backup | grep -q " $date "; echo $?)"

或更规范地说,只需直接测试退出代码:

if rdiff-backup -l folder/b/1_backup | grep -q " $date "
then
  echo "Already done"
else
  echo "No match for $date"
fi

推荐阅读