Bash脚本-如果总是打印其他

时间:2018-08-03 16:52:17

标签: bash

我正在尝试使用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)-发行版(amd64-portbld-freebsd11.1)。

1 个答案:

答案 0 :(得分:3)

问题在于您的变量除包含退出代码外还包含日期。

您可以使用grep -q摆脱grep输出:

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