exit
завершит все работающие мультиплексированные соединения. stop
просто больше не будет принимать новые мультиплексированные соединения. Если у вас открыта сессия, она будет завершена с помощью exit
, но останется до автономного закрытия с помощью stop
.
Это не имеет ничего общего с vi.
Вам нужен пробел после «если».
Попробуйте прочитать руководство по программированию оболочки.
Вы также должны использоватьhttps://www.shellcheck.net/
Обратите внимание, что при программировании оболочки команда 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 )
Примечания:
$
не требуется для переменных Так как это 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"
Вот он на ТИО: