มันไม่ควรตอบโต้ มันทำในสิ่งที่ควรทำ: มันอ่านอินพุตและกำหนดให้กับตัวแปร ประเภทไฟล์. อย่างไรก็ตาม คุณมีก ในขณะที่ วนซ้ำซึ่งเป็นการตรวจสอบค่าของตัวแปรที่ไม่เคยเปลี่ยนแปลง:
ในขณะที่ [[ "$fileType" != "EXIT" ]];
เนื่องจากมูลค่าของ $ประเภทไฟล์ ถูกตั้งค่าเพียงครั้งเดียวและก่อนการ ในขณะที่ ห่วงนั่น ในขณะที่ กลายเป็นลูปไม่สิ้นสุดจนกว่าคุณจะผ่าน ทางออก ในการลองครั้งแรก ไม่ว่าในกรณีใด สคริปต์ของคุณจะใช้งานไม่ได้ตั้งแต่ผลลัพธ์ของ ไฟล์รูปแบบ grep -q จะไม่เป็น 1. ในความเป็นจริง มันจะว่างเปล่าเสมอเนื่องจากนั่นคือสิ่งที่ grep -q ทำ. ฉันสงสัยว่าคุณตั้งใจตรวจสอบสถานะการออกของคำสั่ง แต่ถึงแม้จะไม่มีจุดหมาย: ไม่มีประโยชน์ในการอ่านไฟล์ทั้งหมดเพียงครั้งเดียว grep -q เพียงเพื่ออ่านทั้งหมดอีกครั้งด้วย grep -F.
นี่คือเวอร์ชันที่ใช้งานได้ของฟังก์ชันของคุณ:
ฟังก์ชัน findFiles () {
ในขณะที่ [[ "$fileType" != "EXIT" ]];
ทำ
echo "ป้อนประเภทไฟล์ที่ต้องการค้นหา (รวม '.') || พิมพ์ EXIT เพื่อยุติโปรแกรม "
อ่านประเภทไฟล์
grep -F "$fileType" index.html >>foundFiles.txt
เสร็จแล้ว
rm index.html
};
หรือถ้าคุณต้องการหลีกเลี่ยงการสร้างช่องว่าง foundFiles.txt หากไม่พบรายการที่ตรงกัน คุณสามารถลอง:
ฟังก์ชัน findFiles () {
ในขณะที่ [[ "$fileType" != "EXIT" ]];
ทำ
echo "ป้อนประเภทไฟล์ที่ต้องการค้นหา (รวม '.') || พิมพ์ EXIT เพื่อยุติโปรแกรม "
อ่านประเภทไฟล์
ถ้า grep -qm1 "$fileType" index.html; แล้ว
grep -F "$fileType" index.html >>foundFiles.txt
ไฟ
เสร็จแล้ว
rm index.html
};
เดอะ -ม ช่วยให้มั่นใจได้ว่า เกรป ออกหลังจากการแข่งขันครั้งแรก คุณจึงไม่ต้องอ่านไฟล์ทั้งหมดสองครั้ง โปรดทราบว่าฉันไม่ได้ใช้การแทนที่คำสั่ง ($(คำสั่ง)) ไวยากรณ์เนื่องจากฉันกำลังตรวจสอบว่าคำสั่งสำเร็จและไม่ได้พยายามใช้เอาต์พุต