Bash如何减少用户每次输入时的猜测数?

时间:2018-09-20 19:41:39

标签: bash

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个猜测。 如何执行此操作?

2 个答案:

答案 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

这对您来说可能看起来更干净。