Много elif, там лучший путь?

Установите сервис NTP на виртуальную машину:

sudo apt-get install ntp

Тем путем виртуальная машина (принимающий это имеет доступ в Интернет) установит свое время с удаленного сервера NTP.

Если это уже установлено, проверьте, что услуга работает:

sudo service ntp status

Если это не, запустите его:

sudo service ntp start

Наконец, можно вынудить это получить время от сервера с

sudo ntpdate 1.debian.pool.ntp.org
3
05.02.2015, 00:02
5 ответов

Я думаю, что корпус 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 ;;
...
17
27.01.2020, 21:07

Имена в 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
1
27.01.2020, 21:07

Это хороший случай для массива. Вот пример:

mapping=([40]='Osvaldo'
         [47]='Berenice'
         [54]='Nizaá')

echo "Esta semana le toca preparar el café a ${mapping[FECHA]}" | mail -s 'Café' mailgroup@somedomain.mx

Это полностью устраняет условные условные.

6
27.01.2020, 21:07
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
0
27.01.2020, 21:07

Если каждый код кода после , если состояние конца в выход , то вам не нужен 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

отдельно от этого, в этом случае, поскольку код практически одинаково в каждом случае, я бы использовал решение Сэма Хосевара.

0
27.01.2020, 21:07

Теги

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