Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell-比较时间 重新表述问题:_Shell - Fatal编程技术网

Shell-比较时间 重新表述问题:

Shell-比较时间 重新表述问题:,shell,Shell,我确信一定有一种优雅的方式来放置这个脚本,但现在我可以根据我的要求,在cron的每小时运行中放置一个脚本,它将检查小时,并基于VSZ变量执行 剧本可以缩短吗 脚本的时间安排: b/w 6pm-7am - restart the server b/w 7am-6pm - send warning message 这是我的剧本: ct=`date +%H` VSZ=3900000 # Range 1 hr1=18;hr2=19;hr3=20;hr4=21;hr5=22;hr6=23;hr7=00

我确信一定有一种优雅的方式来放置这个脚本,但现在我可以根据我的要求,在cron的每小时运行中放置一个脚本,它将检查小时,并基于VSZ变量执行

剧本可以缩短吗

脚本的时间安排:

b/w 6pm-7am - restart the server
b/w 7am-6pm - send warning message 
这是我的剧本:

ct=`date +%H`
VSZ=3900000
# Range 1
hr1=18;hr2=19;hr3=20;hr4=21;hr5=22;hr6=23;hr7=00;hr8=01;hr9=02;hr10=03;hr11=04;hr12=05;hr13=06

# Range 2
hr14=07;hr15=08;hr16=09;hr17=10;hr18=11;hr19=12;hr20=13;hr21=14;hr22=15;hr23=16;hr24=17

# First Range
if [ $ct -eq $hr1 ] || [ $ct -eq $hr2 ] || [ $ct -eq $hr3 ] || [ $ct -eq $hr4 ] || [ $ct -eq $hr5 ] || [ $ct -eq $hr6 ] || [ $ct -eq $hr7 ] || [ $ct -eq $hr8 ] || [ $ct -eq $hr9 ] || [ $ct -eq $hr10 ] || [ $ct -eq $hr11 ] || [ $ct -eq $hr12 ] || [ $ct -eq $hr13 ] && [ $VSZ -gt '3800000' ]
then
  echo "restart"
fi

# Second Range
if [ $ct -eq $hr14 ] || [ $ct -eq $hr15 ] || [ $ct -eq $hr16 ] || [ $ct -eq $hr17 ] || [ $ct -eq $hr18 ] || [ $ct -eq $hr19 ] || [ $ct -eq $hr20 ] || [ $ct -eq $hr21 ] || [ $ct -eq $hr22 ] || [ $ct -eq $hr23 ] || [ $ct -eq $hr24 ] && [ $VSZ -gt '3500000' ]
then
  echo "notify"
fi

谢谢,Sue

您需要的是| |运算符而不是&。即OR运算符和not and。小时不能同时大于或等于18和小于7

或者,如果需要,可以使用a-o运算符

if [ $ct -ge '18' -o $ct -lt '07' ]

你说不工作是什么意思?它什么也不打印吗?它是否返回错误?你用的是什么外壳?到目前为止,您的代码样本似乎缺少一个fi来结束您的if,我不知道这是否是一个打字错误。此外,使用OR条件而不是a,并且数字永远不会大于18且小于7 VSZ变量的作用是什么?除此之外,您的整个条件都可以由@user1328862编写的解决方案替代。我甚至提供了一个工作示例来查看测试的实际效果。只需删除我的for循环并修改代码。但是,这对于第一种情况不起作用:6pm-7am@julienc是的,会的。@Ploutox Oops,我是指第二个案例,早上7点到下午6点,因为例如20点将在07点之后,即使它也在18点之后。@julienc我们比较$ct-lt 07,捕捉任何ct<07或捕捉任何ct>=18的$ct-ge 18。因此,$ct-GE18捕获了20,服务器将重新启动,这是预期的行为。ct=7…17不会被这种情况捕获,因此只会打印一条警告。我的问题更多的是比较小时数,而不是数字。正如你们所知道的,我正在比较小时的范围,我不知道如何将23小时与07小时进行比较。希望你明白我的问题。
ct=`date +%H`
VSZ=3900000
# Range 1
hr1=18;hr2=19;hr3=20;hr4=21;hr5=22;hr6=23;hr7=00;hr8=01;hr9=02;hr10=03;hr11=04;hr12=05;hr13=06

# Range 2
hr14=07;hr15=08;hr16=09;hr17=10;hr18=11;hr19=12;hr20=13;hr21=14;hr22=15;hr23=16;hr24=17

# First Range
if [ $ct -eq $hr1 ] || [ $ct -eq $hr2 ] || [ $ct -eq $hr3 ] || [ $ct -eq $hr4 ] || [ $ct -eq $hr5 ] || [ $ct -eq $hr6 ] || [ $ct -eq $hr7 ] || [ $ct -eq $hr8 ] || [ $ct -eq $hr9 ] || [ $ct -eq $hr10 ] || [ $ct -eq $hr11 ] || [ $ct -eq $hr12 ] || [ $ct -eq $hr13 ] && [ $VSZ -gt '3800000' ]
then
  echo "restart"
fi

# Second Range
if [ $ct -eq $hr14 ] || [ $ct -eq $hr15 ] || [ $ct -eq $hr16 ] || [ $ct -eq $hr17 ] || [ $ct -eq $hr18 ] || [ $ct -eq $hr19 ] || [ $ct -eq $hr20 ] || [ $ct -eq $hr21 ] || [ $ct -eq $hr22 ] || [ $ct -eq $hr23 ] || [ $ct -eq $hr24 ] && [ $VSZ -gt '3500000' ]
then
  echo "notify"
fi