bash - 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)。
解决方案
问题是您的变量除了退出代码之外还包含日期。
您可以使用以下命令摆脱 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
推荐阅读
- laravel - 尝试更改 Laravel 的分页→项目中的数据但失败,我该如何解决?
- c# - C# - 通过 mongodb 驱动程序检查字典是否包含空值
- javascript - NodeList.forEach 中的 appendChild 仅附加 readableStream 中的第一个元素
- c# - 如何修复从列表中选择元素的递归方法
- google-apps-script - 在应用程序脚本中使用库时,无效电子邮件:发生未定义错误,但如果我直接使用库代码,就可以了
- google-sheets - 有没有办法在电子表格的“GoogleTranslate()”函数中跳过翻译中的特定单词?
- c# - 将网格视图行转换为列
- python - 为什么在使用 K-Means 聚类时我的数据点不在正确准确的聚类中?
- swift - 修复了选项的问题,但现在我的标签和图像没有设置为我告诉它们设置的内容
- ios - UITableView 单元格插入行故障