#!/bin/bash
i=0
d="$(date +%d)"
#wrong one:
#an="$(cal | awk '/[0-9]/ {print $2}' | tail -2)"
# fixed one:
an="$(cal | col -b | sed 's/_//g' | awk '/[0-9]/ {print $2}' | tail -2)"
for e in $an
do
if [ "$d" -eq "$e" ]; then
i=1
fi
done
echo i=$i
问题出在 $an/$e 但我不明白为什么以及如何解决它。我看过,它没有任何空格,它们是数字,但 bash 不这么认为。
<<编辑>>
好吧,我同意,也许我选择了错误的方法,只是认为使用 cal 会很简单。 它是更大脚本的一部分,因此我需要从中获取结果,以便脚本可以进一步继续执行代码。 我需要获取 2 个上周一、周二、...或周日,并将其与今天进行比较,如果状态相同,请将此信息提供给脚本。
最佳答案
cal 使用重划线来下划线今天 cal |更少
如果你不这样做
手头有一台 ASCII 打印机。
您需要先过滤掉它。
col 是一个工具
i=0
d="$(date +%d)"
an="$(cal | col -b | awk '/[0-9]/ {print $2}' | tail -2)"
for e in $an
do
if [ "$d" -eq "$e" ]; then
i=1
fi
done
替代方案是今天是一个月中最后两个星期一之一。
# must be GNU date
(( `date -d '2 weeks' +' i = %d < 14 && %w == 1 '` ))
该表达式将 i 设置为 1 或 0 并返回 true 或 false
如果您想要“周日 bug”,请使用 13 天
%w == 0
而不是 2 周
%w == 1
关于Bash -eq 不起作用,可能是因为 cal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686389/