Tôi đã gõ một đoạn script để kiểm tra một số cấu hình trong các máy chủ Linux từ một danh sách. Có quá nhiều máy chủ trong danh sách, vì vậy tôi chia 10 cho 10 danh sách này với vòng lặp bên dưới:
...
...
for ((i=0; i <= $serverCounter; i+=15))
do
if [ $i -ge $serverCounter ]
then
exit
else
echo $i
Kontrol $list &
((first+=15))
((last+=15))
fi
done
...
...
Nhưng ở tình huống này tôi không thể thoát khỏi vòng lặp này. Bạn có thể thấy tôi đã thêm một điều kiện if để thoát nhưng nó không hoạt động (tôi không biết tại sao).
Làm cách nào tôi có thể thoát khỏi vòng lặp này mà không từ bỏ "& amp;" tại EOL (dòng chức năng Kontrol)
Vòng lặp của bạn sẽ chạy một số lần hữu hạn. Tôi sẽ không bao giờ lớn hơn máy chủ, vì nó sẽ tồn tại khi nó bằng hoặc lớn hơn so với máy chủ.
—
Ramhound
thực sự không có vấn đề gì về việc chạy và hoàn thiện Tôi không thể thấy quá trình trong ps -ef, vì vậy tập lệnh có thể kết thúc nhưng tôi không thể rơi vào màn hình bash sau lần điều khiển cuối cùng. chỉ con trỏ đang nhấp nháy. Vấn đề là trên "& amp;" chuyển hướng tôi nghĩ vậy
—
Gefolge
có @Ramhound Tôi biết điều đó nhưng tôi đã thêm dòng đó sau vấn đề này rồi. Vì vậy, có, tôi không thể nhập true if statement nhưng tôi không thể thoát khỏi vòng lặp trước nếu có điều kiện.
—
Gefolge
@Gefolge - Điều kiện thoát của bạn chỉ được đánh giá một lần mỗi lần lặp của vòng lặp trừ khi bạn có thêm một điều kiện phá vỡ hoặc tiếp tục vòng lặp.
—
Ramhound
$i -ge $serverCounter
là dự phòng với vòng lặp for (chỉ bắt trường hợp trong đó$i -eq $serverCounter
). Như đã viết, mã của bạn vẫn sẽ bắt đầu N phiên bản song song củaKontrol
trong đó N làserverCounter/15
, vì vậy vấn đề của bạn có thể là tất cả các trường hợp này cuối cùng làm quá tải hệ thống của bạn và bạn không còn đủ CPU để tiếp tục vòng lặp. Bạn có thể phải viết một cái gì đó phức tạp hơn để không bao giờ có nhiều phiên bản K của Kontrol chạy cùng một lúc.