如果一周中的几天是一组天,如何使用 If-Else 执行某些操作?

如果一周中的几天是一组天,如何使用 If-Else 执行某些操作?

我有一个要求,如果一周中的某一天是 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

(此解决方案假设bashksh93或任何其他以这种方式使用 执行正则表达式的 shell =~

相关内容