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