มันไม่ควรตอบโต้ มันทำในสิ่งที่ควรทำ: มันอ่านอินพุตและกำหนดให้กับตัวแปร ประเภทไฟล์
. อย่างไรก็ตาม คุณมีก ในขณะที่
วนซ้ำซึ่งเป็นการตรวจสอบค่าของตัวแปรที่ไม่เคยเปลี่ยนแปลง:
ในขณะที่ [[ "$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
};
เดอะ -ม
ช่วยให้มั่นใจได้ว่า เกรป
ออกหลังจากการแข่งขันครั้งแรก คุณจึงไม่ต้องอ่านไฟล์ทั้งหมดสองครั้ง โปรดทราบว่าฉันไม่ได้ใช้การแทนที่คำสั่ง ($(คำสั่ง)
) ไวยากรณ์เนื่องจากฉันกำลังตรวจสอบว่าคำสั่งสำเร็จและไม่ได้พยายามใช้เอาต์พุต