만족할 때까지 스크립트를 반복하도록 bash에게 알려주는 방법.


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

답변:


2

이 코드를 다음과 같이 무한 루프에 넣어야합니다.

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

Ctrl+ C가 눌 렸을 때 멈추기 위해 , 실제로하고있는 것은 신호를 잡는 것입니다 (구체적으로 SIGINT). trap이 키 조합을 누를 때 트리거되도록 키 를 정의해야 합니다.

트랩에 대한 자세한 내용은 여기를 참고하십시오. 여기 에는 SIGINT예제와이를 잡은 후 인쇄 할 수있는 방법 이 포함되어 있습니다.

함정 [명령] [신호]

이것은 트랩 명령이 SIG 접두어가 있거나없는 신호 이름이거나 신호 번호 일 수있는 나열된 신호를 잡으라는 명령입니다. 신호가 0 또는 EXIT이면 쉘이 종료 될 때 COMMAND가 실행됩니다. 신호 중 하나가 DEBUG이면, 모든 단순 명령 다음에 COMMAND리스트가 실행됩니다. 신호도 ERR로 지정할 수 있습니다. 이 경우 COMMANDS는 단순한 명령이 0이 아닌 상태로 종료 할 때마다 실행됩니다. 0이 아닌 종료 상태가 if 문의 부분 또는 while 또는 until 루프에서 오는 경우 이러한 명령이 실행되지 않습니다. 논리적 AND (&&) 또는 OR (||) 결과가 0이 아닌 종료 코드가되거나 명령의 반환 상태가! 운영자.


나는 열쇠의 최종 조합이 선택적이라고 가정한다. 또는 아마 초 수를 설정하도록 코드를 설정할 수있다.
Hellreaver

1
실제로는 신호를 트랩합니다. 따라서 bash가 인식 할 수있는 신호를 생성 할 수 있다면 괜찮습니다. Ctrl + C의 경우가 SIGINT스크립트에 실제로 생성 되지만 모든 조합이 신호를 생성 하지는 않습니다 . 그러나 다른 bash 스크립트의 신호를 스크립트로 전송할 수는 있지만, 이는 수신 bash 스크립트의 PID를 알고 있어야하므로 지루할 수 있습니다. X루프 내에서 반복 횟수를 계산하는 변수를 사용하여 반복 을 수행 한 다음 루프를 종료 할 수도 있습니다.
nKn

세트 넘버는 내가 필요로하는 것과 완벽하게 어울린다.
Hellreaver
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.