На этом шаге вы устанавливаете -туннель. Когда вы запускаете -вверх по ssh в туннельном режиме -, он просто будет работать в туннельном режиме -, не предоставляя никаких дополнительных выходных данных.
После этого шага вы можете начать:
vncviewer 127.0.0.1::5901
, чтобы установить соединение.
Обратите внимание, что 5901
— это номер порта, который вы использовали для настройки -вашего туннеля. Синтаксис gvncviewer
отличается; часть в строке команды -после :
используется для указания дисплея, а не номера порта, насколько я могу судить (я не используюgvncviewer
)
Математика — это решение :).. пожалуйста, проверьте приведенный ниже код:
#!/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"
Измените свои первые операторы и добавьте последнюю часть в качестве 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
#!/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