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
Eu tenho uma exigência de que, se um dia da semana for segunda, terça ou quarta-feira, execute determinados scripts; caso contrário, não faço nada.
if [[ $(date '+%a') == "Mon" && $(date '+%a') == "Tue" && $(date '+%a') == "Wed" ]]
then
echo "PERFORM TASK"
else
echo "DONT DO ANYTHING"
fi
estou recebendo NÃO FAÇA QUALQUER COISA
O que está errado. porque hoje a data é "segunda-feira" .. então eu estava esperando para obter "PERFORM TASK" ... Se eu fizer apenas apenas segunda-feira, está funcionando ... if [[ $(date '+%a') == "Mon" ]]
.. é quando eu adiciono os outros dias, isn ' t trabalhando .... o que estou fazendo errado? por favor ajude.
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
Você está pedindo
if today is Monday AND today is Tuesday AND ...
que claramente não pode ser verdade. O &&
é um operador de condição AND. Você provavelmente deseja ||
, que é o operador da condição OR.
today=$(date +'%a')
if [[ $today == "Mon" || $today == "Tue" || $today == "Wed" ]]
then
echo "PERFORM TASK"
else
echo "DON'T DO ANYTHING"
fi
Como uma consideração de eficiência, movi o comando date
para fora da condição if...
para que seja executado apenas uma vez. (Isso também evita uma possível condição de corrida no domingo / segunda ou quarta / quinta-feira à meia-noite.)
Você está usando &&
em vez de ||
em sua condição, o que significa que, para obter a saída PERFORM TASK
, o dia da semana deve ser todos nesses dias. / p>
Em vez disso:
day="$( date +"%a" )"
if [[ "$day" =~ ^(Mon|Tue|Wed)$ ]]; then
echo "PERFORM TASK"
else
echo "DON'T DO ANYTHING"
fi
(Esta solução assume bash
ou ksh93
ou qualquer outro shell que faça expressões regulares desta forma com =~
)