bash脚本执行日期/时间

时间:2010-01-15 16:34:51

标签: linux bash date

我正试图打开和关闭一段时间。我在Linux环境中有一个bash脚本,出于安全原因,我希望防止在上午9点到下午5点之间执行,除非给出一个标志。因此,如果我在上午9点到下午5点之间执行./script.sh,它会说“NO GO”,但如果我这样做./script.sh -force它会绕过检查。基本上确保这个人不会偶然做某事。我已经尝试了一些日期命令,但无法将这个东西包裹在我的脑海里。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:3)

写一个函数。使用date +"%k"获取当前小时,并(( ))进行比较。

答案 1 :(得分:2)

基本答案:

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)工作。关于这一点的要点是强调控件只与环境变量一样好。用户可以使用环境变量。

答案 2 :(得分:1)

这有效

#!/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

答案 3 :(得分:0)

测试脚本:

#!/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