linuxbash脚本while循环,linux–Bashwhilewhile循环两次这是⼀个简单的⽅法来了解你的问题:
[是⼀个实际的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
$[ 2 -lt 3 ] #The test command using square brackets
$echo $?
看⼀下测试的联机帮助页,您将看到所有有效的测试.这个:
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'
现在,让我们将测试语法转换回[…],因为它在眼睛上更容易
linux循环执行命令脚本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' ]]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。