linux bash脚本 while循环,linux – Bash while while循环两次

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

[是一个实际的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 $?

0

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

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' ]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值