代码之家  ›  专栏  ›  技术社区  ›  Daniil

bash脚本执行日期/时间

  •  3
  • Daniil  · 技术社区  · 15 年前

    我现在正试着断断续续地想办法解决这个问题。我在Linux环境中有一个bash脚本,出于安全考虑,我希望避免在上午9点到下午5点之间执行,除非给出了一个标志。因此,如果我在上午9点到下午5点之间这样做,/script.sh会说“不执行”,但是如果我这样做,/script.sh-强制它会绕过检查。基本上要确保这个人不会因为意外而做什么。我试过一些约会命令,但我记不住。有人能帮忙吗?

    4 回复  |  直到 10 年前
        1
  •  3
  •   Ignacio Vazquez-Abrams    15 年前

    写一个函数。使用 date +"%k" 获取当前时间,以及 (( )) 比较一下。

        2
  •  2
  •   Jonathan Leffler    15 年前

    基本回答:

    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)。有关这一点的重点是,您的控件只和环境变量一样好。用户可以使用环境变量进行futz。

        3
  •  1
  •   Keith Reynolds    10 年前

    这作品

    #!/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
    
        4
  •  0
  •   Eduardo    15 年前

    测试脚本:

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