дата / время выполнения bash-скрипта - PullRequest
3 голосов
/ 15 января 2010

Я пытаюсь выяснить это время от времени. У меня есть сценарий bash в среде Linux, который, из соображений безопасности, я хочу предотвратить выполнение, скажем, с 9:00 до 17:00, если не указан флаг. Так что, если я сделаю ./script.sh между 9 утра и 5 вечера, он скажет «НЕТ ИДЕТ», но если я сделаю ./script.sh -force, это обойдет проверку. В основном, чтобы убедиться, что человек не делает что-то случайно. Я пробовал некоторые команды даты, но не могу обернуть эту вещь в моем уме. Кто-нибудь может помочь?

Ответы [ 4 ]

3 голосов
/ 15 января 2010

Написать функцию. Используйте date +"%k", чтобы получить текущий час, и (( )), чтобы сравнить его.

2 голосов
/ 15 января 2010

Базовый ответ:

case "$1" in
(-force)
    : OK;;
(*)
    case $(date +'%H') in
    (09|1[0-6]) 
        echo "Cannot run between 09:00 and 17:00" 1>&2
        exit 1;;
    esac;;
esac

Обратите внимание, что я протестировал это (скрипт с именем 'so.sh'), выполнив:

TZ=US/Pacific sh so.sh
TZ=US/Central sh so.sh

Он работал в тихоокеанское время (08:50), а не в центральное время (10:50). Суть в том, что вы подчеркиваете, что ваши элементы управления работают так же хорошо, как и переменные среды. И пользователи могут работать с переменными окружения.

1 голос
/ 07 апреля 2014

Это работает

#!/bin/bash

# Ensure environmental variable runprogram=yes isn't set before 
unset runprogram 

# logic works out to don't run if between 9 and 5pm as you requested
[ $(date "+%k")  -le 9 -a  $(date +"%k")  -ge 17 ] && runprogram=yes  

# Adding - avoids the need to test if the length of $1 is zero
[ "${$1}-" = "-forced-" ] && runprogram=yes 

if [ "${runprogram}-" = "yes-" ]; then 
    run_program 
else 
    echo "No Go" 1>&2 #redirects message to standard error
fi
0 голосов
/ 15 января 2010

Тестовый скрипт:

#!/bin/bash

HOUR=$(date +%k)
echo "Now hour is $HOUR"

if [[ $HOUR -gt 9 ]] ; then
  echo 'after 9'
fi


if [[ $HOUR -lt 23 ]]; then
  echo 'before 11 pm'
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...