加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash while while循环两次

发布时间:2020-12-14 01:18:40 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写一个bash脚本,如果时间在一定时间之后且在某个时间之前,它将循环.这是我得到的,但它给了我一个错误; #!/bin/bashwhile [ date +"%T" -gt '06:00:00' date +"%T" -lt '21:00:00']; do ##echo `php mainstatquery.php` echo "Hello World"; slee
我正在尝试编写一个bash脚本,如果时间在一定时间之后且在某个时间之前,它将循环.这是我得到的,但它给了我一个错误;

#!/bin/bash

while [ date +"%T" -gt '06:00:00' && date +"%T" -lt '21:00:00'];
  do
  ##echo `php mainstatquery.php`
  echo "Hello World";
  sleep 5;
done

这是错误

./timer.sh: line 3: [: missing `]'

如果有人能指出我正确的方向.

解决方法

这是一个简单的方法来了解你的问题:

[是一个实际的Unix命令.做ls / bin / [你会看到.它是/ bin / test命令的链接.从命令行进行测试并查看可以执行的各种测试.

while所做的是执行您给出的命令,如果它返回零退出状态,则while语句被视为true,语句将继续.你可以做这样的事情:

while sleep 2
do
   echo "I slept for two seconds"
done

所有测试命令都做了某种测试(文件测试,相等测试等),如果语句为真则返回零,否则返回非零:

$ test 2 -gt 3
$echo $?
1   <- That statement is false

$[ 2 -lt 3 ]   #The test command using square brackets
$echo $?
0  <- That statement is true.

看一下测试的联机帮助页,您将看到所有有效的测试.这个:

while [ date +"%T" -gt '06:00:00' && date +"%T" -lt '21:00:00']

是相同的

while test date +"%T" -gt '06:00:00' && date +"%T" -lt '21:00:00'

我们在这里讨论一些事情:

> date%T不是test命令的有效运算符.

test命令无法在内部执行命令.你需要做的是将该命令放在$(..)中并且可能使用引号来安全地播放它.从而:

while test "$(date +"%T")" -gt '06:00:00' && "$(date +"%T")" -lt '21:00:00'

>&&在test命令中不是有效的运算符.您可能想要的是-a将测试中的两个测试串联在一起的连接.

这会给你:

while test $(date +"%T") -gt '06:00:00' -a "$(date +"%T")" -lt '21:00:00'

>有两个独立的大于测试运算符进行比较.一个用于字符串,一个用于整数. -gt是整数的测试.由于你正在处理字符串,你需要使用>:

同时测试“$??(date”%T“)”> ’06:00:00′-a“$(date”%T“)”< '21:00:00'
作为替代方案,您也可以使用&&联合而不是-a,但&&和必须是单独的测试声明:

while test "$(date +"%T")" > '06:00:00' && test "$(date +"%T")" < '21:00:00'

现在,让我们将测试语法转换回[…],因为它在眼睛上更容易

while [ "$(date +"%T")" > '06:00:00' -a "$(date +"%T")" < '21:00:00' ]

要么

while [ "$(date +"%T")" > '06:00:00' ] && [ "$(date +"%T")" < '21:00:00' ]

顺便说一句,内部[[…]]更好 – 尤其是>签名,因为它可以被shell解释为文件重定向.

while [[ "$(date +"%T")" > '06:00:00' -a "$(date +"%T")" < '21:00:00' ]]

要么

while [[ "$(date +"%T")" > '06:00:00' ]] && [[ "$(date +"%T")" < '21:00:00' ]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读