Установите сервис NTP на виртуальную машину:
sudo apt-get install ntp
Тем путем виртуальная машина (принимающий это имеет доступ в Интернет) установит свое время с удаленного сервера NTP.
Если это уже установлено, проверьте, что услуга работает:
sudo service ntp status
Если это не, запустите его:
sudo service ntp start
Наконец, можно вынудить это получить время от сервера с
sudo ntpdate 1.debian.pool.ntp.org
Я думаю, что корпус CASE / ESAC
конструкция здесь подходит здесь.
#!/bin/bash
case "`date +%j`" in
40) name=Osvaldo ;;
47) name=Berenice ;;
54) name=Nizaá ;;
*) exit ;;
esac
echo "Esta semana le toca preparar el café a ${name}" \
| mail -s 'Café' mailgroup@somedomain.mx
Примечание: если тот же человек должен сделать кофе несколько раз, вы можете совокупные тесты с |
:
case "`date +%j`" in
12|23|40|49) name=Osvaldo ;;
10|19|30|47) name=Berenice ;;
...
Имена в ConfigFile, как COOME.TXT:
040=Osvaldo
047=Berenice
054=Nizaá
Когда кто-то болен, уволен или нанял, вы не хотите менять свой код:
name=$(grep "^$(date '+%j')=" coffee.txt | cut -d= -f2-)
echo "Esta semana le toca preparar el café a ${name}" \
| mail -s 'Café' mailgroup@somedomain.mx
Это хороший случай для массива. Вот пример:
mapping=([40]='Osvaldo'
[47]='Berenice'
[54]='Nizaá')
echo "Esta semana le toca preparar el café a ${mapping[FECHA]}" | mail -s 'Café' mailgroup@somedomain.mx
Это полностью устраняет условные условные.
set -- 40 Osvaldo 47 Bernice 54 Nizaá
[ "${FECHA#[54][074]}" = "${FECHA%"${FECHA#44}"}" ] &&
until [ "$((${1#$FECHA}0&&$#))" -eq 0 ] &&
printf "${1+%s\n}" "Esta semana le toca preparar el café a $2"
do shift 2; done
[ "$#" -gt 1 ] && mail -s 'Café' mailgroup@somedomain.mx
Если каждый код кода после , если
состояние конца в выход
, то вам не нужен ELIF
; Просто конец условного с Fi
.
Я также большой поклонник вкладывания , затем
в той же линии, что и , если
, что делает код короче в Linecount и проще (быстрее) для чтения IMHO.
Таким образом, ваш код становится:
#!/bin/bash
#
FECHA=`date +%j`
if [ $FECHA -eq 40 ]; then
echo "Esta semana le toca preparar el café a Osvaldo" | mail -s 'Café' mailgroup@somedomain.mx
exit
fi
if [ $FECHA -eq 47 ]; then
echo "Esta semana le toca preparar el café a Berenice" | mail -s 'Café' mailgroup@somedomain.mx
exit
fi
if [ $FECHA -eq 54 ]; then
echo "Esta semana le toca preparar el café a Nizaá" | mail -s 'Café' mailgroup@somedomain.mx
exit
fi
отдельно от этого, в этом случае, поскольку код практически одинаково в каждом случае, я бы использовал решение Сэма Хосевара.