Баш -больше и меньше в пределах определенных параметров

На этом шаге вы устанавливаете -туннель. Когда вы запускаете -вверх по ssh в туннельном режиме -, он просто будет работать в туннельном режиме -, не предоставляя никаких дополнительных выходных данных.

После этого шага вы можете начать:

vncviewer 127.0.0.1::5901

, чтобы установить соединение.

Обратите внимание, что 5901— это номер порта, который вы использовали для настройки -вашего туннеля. Синтаксис gvncviewerотличается; часть в строке команды -после :используется для указания дисплея, а не номера порта, насколько я могу судить (я не используюgvncviewer)

-2
24.11.2020, 19:25
3 ответа

Математика — это решение :).. пожалуйста, проверьте приведенный ниже код:

#!/bin/bash

name=Jack

number=$(( 1+$RANDOM%101 ))
echo $number

target=$number
goes=0

until [[ $guess -eq $target ]]
do
    goes=$(( $goes+1 ))
    echo "Guess $goes. Enter a number between 0 and 100"
    read guess

    if [[ $((number - guess)) -eq 0 ]]; then break; fi

    if [[ $((number - guess)) -gt 10 ]] 
    then
        echo "Too low"

    elif [[ $((guess - number)) -gt 10 ]]
    then
        echo "Too high"


    elif [[ $((number - guess)) -le 10 ]] 
    then 
    if [[ $((number - guess)) -lt 0 ]]
    then
            echo "You are within ten on the higher side"
    else

            echo "You are within ten on the lower side"
    fi
    fi
done
echo "Well done $name, it took $goes goes to guess $number"
0
28.04.2021, 23:15

Измените свои первые операторы и добавьте последнюю часть в качестве elifоператора:

if [[ $((number - $guess)) -gt 10 ]] 
then
    echo "Too low"

elif [[ $((guess - $number)) -gt 10 ]]
then
    echo "Too high"


elif [[ $(($number - $guess)) -le 10 ]] 
then 
    echo "You are within ten but too low"

elif [[ $(($guess - $number)) -le 10 ]]
then
    echo "You are within ten but too high"
fi
1
28.04.2021, 23:15
#!/bin/bash

number=$(( 1 + (RANDOM%100) ))    # random number [1,100]

while read -p 'Guess: '; do
        [[ $REPLY == *[![:digit:]]* ]] && continue

        if [[ REPLY -eq number ]]; then
                echo Correct
                break
        elif [[ REPLY -gt number ]]; then
                too=large
                delta=$(( REPLY - number ))
        else
                too=small
                delta=$(( number - REPLY ))
        fi

        if [[ delta -le 10 ]]; then
                close=' (but close)'
        else
                close=
        fi

        printf 'No, too %s%s\n' "$too" "$close"
done

Реализует простую проверку ввода (игнорирует ввод, содержащий не -цифры ), вычисляет, является ли данное предположение слишком большим или слишком маленьким, а также разницу между предположением и правильным ответом как delta. Используя принцип DRY , устанавливает переменные tooи closeв соответствующие строки в зависимости от того, является ли предположение слишком большим или маленьким, и величины ошибки, и, наконец, печатает сообщение, прежде чем позволить пользователю Попробуйте снова.

Игра завершается правильным предположением или нажатием пользователем Ctrl+D , чтобы сигнализировать об окончании ввода, или Ctrl+C , чтобы просто прервать сценарий.


Скрипт, который играет в описанную выше игру. Сценарий предполагает, что приведенный выше сценарий доступен как guessinggameв текущем каталоге.

#!/bin/bash

coproc bash guessinggame

make_guess () {
        printf 'Guessing %d\n' "$1"
        printf '%s\n' "$1" >&${COPROC[1]}
}

guess=50        # initial guess
change=25       # next guess this much higher/lower

make_guess "$guess"
tries=1

while read; do
        printf 'Game says "%s"\n' "$REPLY"

        if [[ $REPLY == 'Correct' ]]; then
                break
        fi

        if [[ $REPLY == *close* ]] && [[ change -gt 10 ]]; then
                # Close call, do not change too much in next guess!
                change=10
        fi

        if [[ $REPLY == *small* ]]; then
                guess=$(( guess + change ))
        else
                guess=$(( guess - change ))
        fi

        change=$(( change / 2 ))
        [[ change -eq 0 ]] && change=1

        make_guess "$guess"
        tries=$(( tries + 1 ))
done <&${COPROC[0]}

printf 'Guessed correctly after %d tries\n' "$tries"

Пример запуска:

$ bash guesser
Guessing 50
Game says "No, too large"
Guessing 25
Game says "No, too large (but close)"
Guessing 15
Game says "No, too small (but close)"
Guessing 20
Game says "No, too small (but close)"
Guessing 22
Game says "Correct"
Guessed correctly after 5 tries
1
28.04.2021, 23:15

Теги

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