bash - bash if 语句没有按预期工作
问题描述
我是 bash 脚本的新手。
我使用这段代码:
#!/bin/bash
count=0
ende="100"
while true; do
out=$(php '/var/www/testsh.php' $count)
if [ "$out"!=="$ende" ]
then
echo "$out i break"
break
fi
echo "sleeping"
sleep 10
((count++))
done
在我的 PHP 中: echo '100';
./test.sh 给我:100 i break
但它应该输出 sleep until $out
is not 100
解决方案
"$out"!=="$ende"
被替换为100!==100
,这是一个非空字符串,其[
评估结果与-n 100!==100
- true 相同,因为它是一个非零字符串。
"$out" != "$ende"
将被替换为100 != 100
具有两个操作数的运算符,并评估为假(因为它比较两个字符串)。
在不同的情况下,!=
可能会产生逻辑错误,因为它将操作数作为字符串进行比较。幸运的是,在您的情况下,字符串的相等性与整数的相等性(您将使用-ne
)相同,但不要指望它总是如此。
- 在
[
, 运营商需要他们的空间 - 在
[
中,没有这样的东西!==
- 对于整数,使用
-eq
,-ne
,-lt
,-le
,-gt
,-ge
此外,您可能会喜欢seq
:
for count in $(seq 100)
do
# will happen 100 times, with `count` from `0` to `99`
done
推荐阅读
- html - 谷歌图表添加颜色特定
- laravel - Laravel:是否可以直接测试函数的 json 响应输出而不实际通过 URI?
- javascript - 对象迭代和比较行为不正确
- typescript - 这是 TypeScript 中的一种类型吗?
- php - 如何将数据从 mysql 检索到我的事件日历中?
- javascript - 如何在给定 HTML 页面字符串索引的情况下动态添加标签?
- java - 将 Java 应用程序与 SQL Server 连接
- django - 如何从生成器中获取奇异值?
- mysql - 从标签组或其他不在组中的产品中选择产品
- javascript - 单击“发送”按钮后检查“成功”响应的 javascript