linux – Bash while while循环两次
我正在尝试编写一个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' 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' ]] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |