Nó không được phép trả lời. Nó đang làm chính xác những gì nó nên làm: nó đọc đầu vào và gán nó cho biến loại tệp
. Tuy nhiên, sau đó bạn có một trong khi
vòng lặp đang kiểm tra giá trị của một biến không bao giờ thay đổi:
while [[ "$fileType" != "EXIT" ]];
Vì giá trị của $fileType
chỉ được đặt một lần và trước trong khi
vòng lặp, đó trong khi
trở thành một vòng lặp vô tận trừ khi bạn vượt qua LỐI RA
trong lần thử đầu tiên. Trong mọi trường hợp, tập lệnh của bạn sẽ không hoạt động vì đầu ra của tệp mẫu grep -q
sẽ không bao giờ được 1
. Trên thực tế, nó sẽ luôn trống vì đó là những gì grep -q
làm. Tôi nghi ngờ bạn muốn kiểm tra trạng thái thoát của lệnh nhưng, ngay cả điều đó cũng vô nghĩa: không có lợi gì khi đọc toàn bộ tệp một lần với grep -q
chỉ để sau đó đọc lại tất cả với grep -F
.
Đây là một phiên bản làm việc của chức năng của bạn:
hàm findFiles() {
while [[ "$fileType" != "EXIT" ]];
làm
echo "Nhập loại tệp cần tìm (bao gồm '.') || Nhập EXIT để kết thúc chương trình"
đọc loại tệp
grep -F "$fileType" index.html >> foundFiles.txt
xong
rm chỉ mục.html
};
Hoặc, nếu bạn muốn tránh tạo một ô trống tìm thấyFiles.txt
nếu không tìm thấy kết quả phù hợp, bạn có thể thử:
hàm findFiles() {
while [[ "$fileType" != "EXIT" ]];
làm
echo "Nhập loại tệp cần tìm (bao gồm '.') || Nhập EXIT để kết thúc chương trình"
đọc loại tệp
nếu grep -qm1 "$fileType" index.html; sau đó
grep -F "$fileType" index.html >> foundFiles.txt
fi
xong
rm chỉ mục.html
};
Các -m
đảm bảo tiếng kêu
thoát sau lần khớp đầu tiên, do đó bạn không cần phải đọc toàn bộ tệp hai lần. Lưu ý cách tôi không sử dụng lệnh thay thế ($(lệnh)
) vì tôi đang kiểm tra xem lệnh đã thành công chưa và không cố sử dụng đầu ra của nó.