2

Я хочу повторить этот код до тех пор, пока я не остановлю его, либо установив время, в течение которого он повторяется, нажав ^ c, либо установив количество итераций, а затем выведя результат повторения. Код должен вводиться сам по себе, так что ввод переменных 5 и 2 в первый раз приведет к перезапуску сценария с 5 и 2.25 в качестве переменных. Сценарий помогает определить квадратный корень из числа, с одним предположением.

#!/bin/bash
echo -n "Please enter the number you need to find the square root for and press [ENTER]: "
read fin
echo -n "Please enter guess and press [ENTER]: "
read gues
var=$(echo "$fin/$gues" | bc -l )
var1=$(echo "$var+$gues" | bc -l )
var2=$(echo "$var1/2" | bc -l )
echo $var2

1 ответ1

2

Вам нужно поместить этот код в бесконечный цикл, такой как:

while 1; do
  # Rest of code
  ...
done

Чтобы остановиться при нажатии Ctrl+C , вам нужно перехватить сигнал (конкретно, SIGINT). Вам нужно определить trap чтобы она срабатывала, когда вы нажимаете эту комбинацию клавиш.

Для получения дополнительной информации о ловушках, вы можете посмотреть здесь, который включает в себя пример SIGINT и как вы можете напечатать что-нибудь после его ловли.

ловушка [КОМАНДЫ] [СИГНАЛЫ]

Это инструктирует команду trap перехватывать перечисленные СИГНАЛЫ, которые могут быть именами сигналов с префиксом SIG или без него или номерами сигналов. Если сигнал равен 0 или EXIT, КОМАНДЫ выполняются при выходе из оболочки. Если одним из сигналов является DEBUG, список КОМАНД выполняется после каждой простой команды. Сигнал также может быть указан как ERR; в этом случае КОМАНДЫ выполняются каждый раз, когда выходит простая команда с ненулевым статусом. Обратите внимание, что эти команды не будут выполняться, когда ненулевой статус выхода поступает из части оператора if или из цикла while или before. Они также не будут выполнены, если логическое И (&&) или ИЛИ (||) приведут к ненулевому коду выхода, или когда статус возврата команды инвертируется с помощью! оператор.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .