Score:2

สคริปต์ทุบตี: คำสั่ง "อ่าน" ไม่ตอบสนอง

ธง in

ฉันกำลังเขียนสคริปต์ทุบตีที่จะ

  1. ดาวน์โหลดโค้ด html ของเว็บไซต์ลงในไฟล์ "index.html"
  2. ถามผู้ใช้เกี่ยวกับประเภทไฟล์และค้นหา "index.html" สำหรับประเภทไฟล์ที่ตรงกัน

นี่คือฟังก์ชันที่จะเสร็จสิ้นขั้นตอนที่ 2:

1. ฟังก์ชัน findFiles() {
2. echo "ป้อนประเภทไฟล์ที่ต้องการค้นหา (รวม '.') || พิมพ์ EXIT เพื่อยุติโปรแกรม "
3. อ่านประเภทไฟล์
4.
5. ในขณะที่ [[ "$fileType" != "EXIT" ]];
6. ทำ
7. ถ้า [[ $(grep -q $fileType index.html) = 1 ]]; แล้ว
8. grep -F "$fileType" index.html >>foundFiles.txt
9. ฟิ
10. เสร็จแล้ว
11.
12. rm index.html
13. };

เมื่อดำเนินการ บรรทัดที่ 3 แจ้งให้ผู้ใช้ป้อนข้อมูล แต่ไม่ตอบสนองเมื่อฉันกด Enter ตัวอย่างดังต่อไปนี้:

2021-09-26 12:41:06 (2.66 MB/s) - บันทึก âindex.htmlâ [94126]

ป้อนประเภทไฟล์ที่ต้องการค้นหา (รวมถึง '.') || พิมพ์ EXIT เพื่อยุติโปรแกรม 
.ไฟล์ PDF
.txt



ฟู
AAAA

ฉันได้ลองประกาศตัวแปรท้องถิ่นแล้ว $ประเภทไฟล์ ครั้งแรกโดยใช้ อ่าน -p และใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัดที่ 3 ผลลัพธ์จะเหมือนเดิมเสมอและฉันไม่สามารถหาวิธีแก้ปัญหาได้ ฉันทราบว่าสิ่งที่ตามหลังบรรทัดที่ 3 มีข้อบกพร่อง แต่ฉันแค่ต้องการความช่วยเหลือเกี่ยวกับบรรทัดที่ 3 เท่านั้น เนื่องจากบรรทัดต่อไปนี้เป็นสิ่งที่ฉันต้องการแก้ไขด้วยตัวเองเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนสคริปต์ทุบตี

ความคิดใด ๆ ที่ชื่นชม

muru avatar
us flag
แสดงให้เราเห็นว่าคุณใช้ฟังก์ชันนี้อย่างไร
Score:4
ธง cn

มันไม่ควรตอบโต้ มันทำในสิ่งที่ควรทำ: มันอ่านอินพุตและกำหนดให้กับตัวแปร ประเภทไฟล์. อย่างไรก็ตาม คุณมีก ในขณะที่ วนซ้ำซึ่งเป็นการตรวจสอบค่าของตัวแปรที่ไม่เคยเปลี่ยนแปลง:

ในขณะที่ [[ "$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
 };

เดอะ -ม ช่วยให้มั่นใจได้ว่า เกรป ออกหลังจากการแข่งขันครั้งแรก คุณจึงไม่ต้องอ่านไฟล์ทั้งหมดสองครั้ง โปรดทราบว่าฉันไม่ได้ใช้การแทนที่คำสั่ง ($(คำสั่ง)) ไวยากรณ์เนื่องจากฉันกำลังตรวจสอบว่าคำสั่งสำเร็จและไม่ได้พยายามใช้เอาต์พุต

Bubbles avatar
in flag
ใช่! ขอบคุณ สิ่งนี้ได้แก้ไขปัญหาของฉันแล้ว และฉันเข้าใจวิธีแก้ปัญหาของคุณ ซึ่งช่วยฉันได้มาก ฉันจะทำงานกับสคริปต์เพื่อให้แน่ใจว่ามันทำในสิ่งที่ฉันพยายามจะทำ
Score:1
ธง cn

ดูเหมือนว่าคุณกำลังจับตัวเองอยู่ในวงวนที่ไม่มีที่สิ้นสุด หากผู้ใช้ไม่ได้พิมพ์ "EXIT" แสดงว่า ในขณะที่ ลูปจะอยู่ตลอดไป ข้อความเพิ่มเติมใดๆ ที่คุณพิมพ์จะถูกสะท้อนไปยังเทอร์มินัล

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา