我正在尝试使用脚本来测试 apt 缓存是否超过 10 分钟
if [ "($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)) -ge 600000" ]; then
echo true
fi
Run Code Online (Sandbox Code Playgroud)
但即使缓存是 1 分钟,这也会返回 true。我究竟做错了什么?
您所做的不是减法,而是在两个值之间放置一个“-”符号。您可以通过尝试看到这一点。
echo "($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp))"
Run Code Online (Sandbox Code Playgroud)
这在我的情况下给出
(1403616665 - 1403583368)
Run Code Online (Sandbox Code Playgroud)
正确的说法应该是
echo "$[$(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)]"
Run Code Online (Sandbox Code Playgroud)
这正确地给出
33297
Run Code Online (Sandbox Code Playgroud)
同样由于最外面的引号,该语句"($(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)) -ge 600000"
被视为第一个值,与 进行比较nothing
,这就是为什么它总是给出真实的结果。
四舍五入,脚本将是
if [ "$[$(date +%s) - $(stat -c %Z /var/lib/apt/periodic/update-success-stamp)]" -ge 600000 ]; then
echo true
fi
Run Code Online (Sandbox Code Playgroud)