bash, если оператор не работает должным образом - PullRequest
0 голосов
/ 18 февраля 2019

Я новичок в скриптах 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 я ломаю

но должно вывести сон до тех пор, пока $out не станет 100

1 Ответ

0 голосов
/ 18 февраля 2019

"$out"!=="$ende" подставляется в 100!==100, которая является непустой строкой, которая [ оценивается так же, как -n 100!==100 - истина, поскольку это ненулевая строка.

"$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...