Как использовать If-Else для выполнения определенных действий, если дни недели заданы днями?

awk 'gsub(/,0/, ",0", $0) != 5' data.input
0
30.01.2017, 19:38
3 ответа
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
4
28.01.2020, 02:15

В условии вы используете &&, а не ||, что означает, что для получения результата PERFORM TASK день недели должен быть все эти дни.

Вместо этого:

day="$( date +"%a" )"

if [[ "$day" =~ ^(Mon|Tue|Wed)$ ]]; then
    echo "PERFORM TASK"
else
    echo "DON'T DO ANYTHING"
fi

(Это решение предполагает использование bash или ksh93 или любой другой оболочки, которая делает регулярные выражения таким образом с =~)

1
28.01.2020, 02:15

Вы спрашиваете

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... , чтобы она выполнялась только один раз. (Это также позволяет избежать потенциального состояния гонки между полуночами воскресенья/понедельника или среды/четверга)

.
1
28.01.2020, 02:15

Теги

Похожие вопросы