首页 > 解决方案 > 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 $outis not 100

标签: bashssh

解决方案


"$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

推荐阅读