Пока цикл не заканчивается, когда условие выполнено

Я пытаюсь сделать игру с лошадью, которая работает в bash. Я скопировал библиотеку gpio в ubuntu из raspbian. Цикл while не заканчивается, когда $ BET не равен 0

BET=0 while [ $BET=0 ] do if [ $(gpio read 21) -eq 1 ] then BET=1 elif [ $(gpio read 22) -eq 1 ] then BET=2 elif [ $(gpio read 23) -eq 1 ] then BET=3 elif [ $(gpio read 24) -eq 1 ] then BET=4 elif [ $(gpio read 25) -eq 1 ] then BET=5 else echo "" > /dev/null fi echo $BET done

Почему это не работа? Спасибо заранее

1
задан 17 January 2018 в 00:04

3 ответа

Вам не хватает пробелов: [ $BET=0 ] должно быть [ $BET = 0 ].

См. [F5] для разницы между тремя.

PS: Запустите shellcheck (из одноименного пакета) до поможет вам выявить потенциальные недостатки и проблемы в сценариях оболочки. Для вашего скрипта он печатает:

In - line 2:
while [ $BET=0 ]
        ^-- SC2077: You need spaces around the comparison operator.


In - line 4:
    if [ $(gpio read 21) -eq 1 ]
         ^-- SC2046: Quote this to prevent word splitting.


In - line 7:
    elif [ $(gpio read 22) -eq 1 ]
           ^-- SC2046: Quote this to prevent word splitting.


In - line 10:
    elif [ $(gpio read 23) -eq 1 ]
           ^-- SC2046: Quote this to prevent word splitting.


In - line 13:
    elif [ $(gpio read 24) -eq 1 ]
           ^-- SC2046: Quote this to prevent word splitting.


In - line 16:
    elif [ $(gpio read 25) -eq 1 ]
           ^-- SC2046: Quote this to prevent word splitting.
4
ответ дан 22 May 2018 в 15:29
  • 1
    Спасибо. Я так много заработал около 3 часов в этой проблеме, и это было такое простое исправление – 9291Sam 17 January 2018 в 00:11

Вам не хватает пробелов: [ $BET=0 ] должно быть [ $BET = 0 ].

См. [F5] для разницы между тремя.

PS: Запустите shellcheck (из одноименного пакета) до поможет вам выявить потенциальные недостатки и проблемы в сценариях оболочки. Для вашего скрипта он печатает:

In - line 2: while [ $BET=0 ] ^-- SC2077: You need spaces around the comparison operator. In - line 4: if [ $(gpio read 21) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 7: elif [ $(gpio read 22) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 10: elif [ $(gpio read 23) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 13: elif [ $(gpio read 24) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 16: elif [ $(gpio read 25) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting.
4
ответ дан 17 July 2018 в 22:51

Вам не хватает пробелов: [ $BET=0 ] должно быть [ $BET = 0 ].

См. [F5] для разницы между тремя.

PS: Запустите shellcheck (из одноименного пакета) до поможет вам выявить потенциальные недостатки и проблемы в сценариях оболочки. Для вашего скрипта он печатает:

In - line 2: while [ $BET=0 ] ^-- SC2077: You need spaces around the comparison operator. In - line 4: if [ $(gpio read 21) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 7: elif [ $(gpio read 22) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 10: elif [ $(gpio read 23) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 13: elif [ $(gpio read 24) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting. In - line 16: elif [ $(gpio read 25) -eq 1 ] ^-- SC2046: Quote this to prevent word splitting.
4
ответ дан 24 July 2018 в 13:28

Другие вопросы по тегам:

Похожие вопросы: