Como eu uso um If-Else para fazer certas coisas se os dias da semana forem definidos como dias?

0

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.

    
por Farah Shire 30.01.2017 / 18:37

3 respostas

4

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
    
por 30.01.2017 / 18:55
1

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.)

    
por 30.01.2017 / 18:43
1

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 =~ )

    
por 30.01.2017 / 18:43