while true
do
if [ $userinput = 1 ];
then
guesses=10
(( answer = RANDOM % 20 ))
read -p "Guess the number between 1-20 if you can $answer : " input
if [ $input != $answer ];
then
(( guesses=guesses-1 ))
echo "Wrong answer! You got ${guesses} left!"
else
echo "Correct answer! You had ${guesses} left. Lucky you!"
read -p "${name}, would you like to continue playing or not [Yes/No]? " decide
if [ $decide = "Yes" ];
then
continue
else
echo -e "${Red}Bye bye!"
示例:
guess = 10
用户输入2个猜测,则程序必须从总共10个猜测中减去这2个猜测,在这种情况下,还剩下10-2 = 8个猜测。 如何执行此操作?
答案 0 :(得分:2)
仅 项必要的更改会将guesses=10
从循环中移出,从而使其仅运行一次(在脚本启动时)。
对于最佳做法减量形式,仅使用terb bash的方法(尽管其有效性不比您现有的实现有效),
(( guesses-- ))
...而更可移植的方法(与所有POSIX系列shell兼容)是:
guesses=$(( guesses - 1 ))
答案 1 :(得分:-1)
如果您专门使用Bash shell,则内置let
是您想要的。
内置let
是在Bash中执行整数算术的一种干净方法。您应该阅读help let
的输出,以更好地了解其工作原理。
在链接的图片中圈出的两行可以写为:
let guesses=10 # Set "guesses" to 10
let guesses-=1 # Decrement "guesses" by 1
大多数精通Bash的黑客都会以这种方式编写这些操作。您还可以使用减后运算符。
let guesses-- # Also decrement "guesses" by 1
这对您来说可能看起来更干净。