Ошибка "fi" в скрипте sh

exitзавершит все работающие мультиплексированные соединения. stopпросто больше не будет принимать новые мультиплексированные соединения. Если у вас открыта сессия, она будет завершена с помощью exit, но останется до автономного закрытия с помощью stop.

1
18.10.2019, 10:51
3 ответа

Это не имеет ничего общего с vi.

Вам нужен пробел после «если».

Попробуйте прочитать руководство по программированию оболочки.

Вы также должны использоватьhttps://www.shellcheck.net/

1
27.01.2020, 23:40

Обратите внимание, что при программировании оболочки команда returnиспользуется для передачи статуса функции, а не значения . Значения передаются через стандартный ввод и стандартный вывод. Это означает, что отладочные/подробные сообщения должны выводиться на stderr :

.
roll_dice() {
    local range=6
    local sum=0

    # add 2 random numbers
    for i in {1..2}; do
        (( sum += (RANDOM % range) + 1 ))
    done

    # "diagnostic" output to stderr
    echo "sum is $sum" >&2

    # values returned on stdout
    echo "$sum"
}

Тогда вы

play_game() {
    # first throw
    # capture the value using command substitution
    sum=$( roll_dice )

Если вы хотите сбросить диагностический вывод:

    sum=$( roll_dice  2>/dev/null )

Примечания:

  • непротиворечивость — это ключ к читаемому коду :либо поместите открывающую фигурную скобку на новую строку, либо на ту же строку, но не на обе сразу
  • не используйте имена переменных ALLCAPS :оставьте их зарезервированными для оболочки
  • в арифметическом выражении bash $не требуется для переменных
0
27.01.2020, 23:40

Так как это bash, вы упустили несколько вещей в конце вашего скрипта.

[...]
        amount=$(($amount-$wager))
        echo You Lost $wager$
    fi
# close function
}  
# get a wager
read -p "Enter wager " wager
# validate and call play_game()
((wager>0)) && play_game || echo "Invalid wager: $wager"

Вот он на ТИО:

Попробуйте онлайн!

0
27.01.2020, 23:40

Теги

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