Làm thế nào để bảo bash lặp lại một tập lệnh cho đến khi đạt yêu cầu, sau đó xuất thành phẩm


2

Tôi đang tìm cách lặp lại mã này cho đến khi tôi dừng nó, bằng cách đặt thời gian lặp lại, nhấn ^ c hoặc đặt số lần lặp, sau đó đưa ra kết quả lặp lại. Mã phải tự nạp vào, sao cho việc nhập biến 5 và 2 lần đầu tiên sẽ dẫn đến việc khởi động lại tập lệnh với 5 và 2,25 làm biến. Kịch bản giúp xác định căn bậc hai của một số, với một lần đoán.

#!/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

Câu trả lời:


2

Bạn cần đặt mã đó vào một vòng lặp vô hạn, chẳng hạn như:

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

Để dừng khi Ctrl+ Cbị tấn công, việc bạn thực sự làm là bẫy tín hiệu (cụ thể, SIGINT). Bạn cần xác định trapđể nó kích hoạt khi bạn nhấn tổ hợp phím đó.

Để biết thêm thông tin về bẫy, bạn có thể xem tại đây , bao gồm một SIGINTví dụ và cách bạn có thể in bất cứ thứ gì sau khi bắt nó.

bẫy [THÔNG TIN] [TÍN HIỆU]

Điều này chỉ thị lệnh bẫy để bắt các TÍN HIỆU được liệt kê, có thể là tên tín hiệu có hoặc không có tiền tố SIG hoặc số tín hiệu. Nếu tín hiệu là 0 hoặc EXIT, LỰA CHỌN được thực thi khi thoát khỏi vỏ. Nếu một trong các tín hiệu là DEBUG, danh sách LỰA CHỌN được thực thi sau mỗi lệnh đơn giản. Một tín hiệu cũng có thể được chỉ định là ERR; trong trường hợp đó, LỰA CHỌN được thực thi mỗi khi một lệnh đơn giản thoát ra với trạng thái khác không. Lưu ý rằng các lệnh này sẽ không được thực thi khi trạng thái thoát khác không xuất phát từ một phần của câu lệnh if hoặc từ vòng lặp while hoặc cho đến khi vòng lặp. Chúng cũng sẽ không được thực thi nếu logic AND (&&) hoặc OR (||) dẫn đến mã thoát khác không hoặc khi trạng thái trả về của lệnh được đảo ngược bằng cách sử dụng! nhà điều hành.


Tôi cho rằng sự kết hợp cuối cùng của các khóa là tùy chọn hoặc có thể được đặt để thực hiện mã trong một số giây đã đặt
Hellreaver

1
Nó thực sự bẫy TÍN HIỆU. Vì vậy, nếu bạn có thể tạo tín hiệu được nhận dạng bởi bash, thì cũng không sao. Đó sẽ là trường hợp của Ctrl + C, thực sự tạo ra một SIGINTtập lệnh, nhưng không phải tất cả các kết hợp đều tạo ra tín hiệu. Tuy nhiên, bạn có thể gửi một tập lệnh bất kỳ tín hiệu nào từ tập lệnh bash khác, nhưng điều đó sẽ liên quan đến việc biết PID của tập lệnh bash nhận, có thể rất tẻ nhạt. Bạn cũng có thể thực hiện các Xbước lặp (với một biến số đếm thời gian đã chạy) trong vòng lặp và sau đó thoát khỏi vòng lặp.
nKn

một số được đặt có vẻ như là một kết hợp hoàn hảo cho những gì tôi cần
Hellreaver
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.