Как сказать bash повторить сценарий до удовлетворительного, затем вывести готовый продукт

473
Hellreaver

Я хочу повторить этот код до тех пор, пока я не остановлю его, либо установив время, в течение которого он повторяется, нажав ^ 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 
2

1 ответ на вопрос

2
nKn

You'd need to put that code into an infinite loop, such as:

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

In order to stop when Ctrl+C is hit, what you're actually doing is to trap a signal (concretely, SIGINT). You'd need to define a trap so it triggers when you hit that combination of keys.

For more info about traps, you can have a look here, which includes a SIGINT example and how you can print anything after catching it.

trap [COMMANDS] [SIGNALS]

This instructs the trap command to catch the listed SIGNALS, which may be signal names with or without the SIG prefix, or signal numbers. If a signal is 0 or EXIT, the COMMANDS are executed when the shell exits. If one of the signals is DEBUG, the list of COMMANDS is executed after every simple command. A signal may also be specified as ERR; in that case COMMANDS are executed each time a simple command exits with a non-zero status. Note that these commands will not be executed when the non-zero exit status comes from part of an if statement, or from a while or until loop. Neither will they be executed if a logical AND (&&) or OR (||) result in a non-zero exit code, or when a command's return status is inverted using the ! operator.

Я предполагаю, что конечная комбинация клавиш является необязательной, или, возможно, может быть установлен, чтобы сделать код в течение установленного количества секунд Hellreaver 8 лет назад 0
Это фактически ловушка СИГНАЛОВ. Итак, если вы можете генерировать сигнал, распознаваемый bash, все в порядке. Это было бы в случае Ctrl + C, который действительно генерирует `SIGINT` для скрипта, но не все комбинации дают сигнал. Однако вы можете отправить сценарию любой сигнал из другого сценария bash, но для этого потребуется знать PID принимающего сценария bash, что может быть утомительно. Вы также можете выполнить итерации `X` (с переменной, которая считает, сколько раз он был выполнен) внутри цикла, а затем выйти из цикла. nKn 8 лет назад 1
установленное число звучит как идеальное соответствие для того, что мне нужно Hellreaver 8 лет назад 0

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