我有以下包装脚本:
#!/bin/bash
$local_time=`date +%H%M`
if [ $local_time -ge 1430 ] && [ $local_time -le 2230 ] ||
[ $local_time -ge 0300 ] && [ $local_time -le 0400 ]
then
echo 'pass'
else
echo 'skip'
fi
Run Code Online (Sandbox Code Playgroud)
我们的想法是创建一个在两个不相交的时间间隔之间运行脚本的包装器脚本.正确评估每个OR'd表达式,但是,当我或两个表达式时,测试失败.
我该如何解决?
你有两个问题
$时,分配给他们,只有当你扩大他们( )此外,既然你已经在使用bash,也可以使用它的更好的语法与(( ))允许你使用比较运算符的结构,< > == !=你可以使用$()命令替换而不是反引号/ gravemarks
#!/bin/bash
local_time=$(( 10#$( date +'%H%M' ) ))
if (( ( local_time >= 1430 && local_time <= 2230 ) ||
( local_time >= 10#0300 && local_time <= 10#0400 ) ))
then
echo 'pass'
else
echo 'skip'
fi
Run Code Online (Sandbox Code Playgroud)
以零开头的数字被解释为八进制.
此外,任何以0开头并包含8或9的数字都将打印错误.
前缀(10#)解决了这个问题.