我有一个要求,如果一周中的某一天是 Monday、Tuesday 或 Wednesday ,则执行某些脚本,否则我不执行任何操作。
if [[ $(date '+%a') == "Mon" && $(date '+%a') == "Tue" && $(date '+%a') == "Wed" ]]
then
echo "PERFORM TASK"
else
echo "DONT DO ANYTHING"
fi
我什么都不做
这是错误的。因为今天的日期是“星期一”..所以我期待得到“执行任务”...如果我只在星期一做,那么工作......if [[ $(date '+%a') == "Mon" ]]
就是当我添加其他日子时,不起作用。 ...我究竟做错了什么?请帮忙。
答案1
case "$(date +%a)" in
Sun)
handle_sunday_stuff
break
;;
Tue|Thu)
handle_tuesday_thursday_stuff
break
;;
Wed)
handle_wednesday_stuff
break
;;
*)
echo "Nothing to do today"
;;
esac
答案2
你在问
if today is Monday AND today is Tuesday AND ...
这显然不可能是真的。是&&
AND 条件运算符。您可能需要||
,它是 OR 条件运算符。
today=$(date +'%a')
if [[ $today == "Mon" || $today == "Tue" || $today == "Wed" ]]
then
echo "PERFORM TASK"
else
echo "DON'T DO ANYTHING"
fi
出于效率考虑,我已将date
命令移至条件之外if...
,以便仅执行一次。 (这也避免了周日/周一或周三/周四午夜潜在的竞争状况。)
答案3
您正在使用&&
而不是||
在您的条件下,这意味着要获得输出PERFORM TASK
,一周中的某一天必须是全部那些天。
反而:
day="$( date +"%a" )"
if [[ "$day" =~ ^(Mon|Tue|Wed)$ ]]; then
echo "PERFORM TASK"
else
echo "DON'T DO ANYTHING"
fi
(此解决方案假设bash
或ksh93
或任何其他以这种方式使用 执行正则表达式的 shell =~
)