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
В условии вы используете &&
, а не ||
, что означает, что для получения результата PERFORM TASK
день недели должен быть все эти дни.
Вместо этого:
day="$( date +"%a" )"
if [[ "$day" =~ ^(Mon|Tue|Wed)$ ]]; then
echo "PERFORM TASK"
else
echo "DON'T DO ANYTHING"
fi
(Это решение предполагает использование bash
или ksh93
или любой другой оболочки, которая делает регулярные выражения таким образом с =~
)
Вы спрашиваете
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...
, чтобы она выполнялась только один раз. (Это также позволяет избежать потенциального состояния гонки между полуночами воскресенья/понедельника или среды/четверга)