Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

บทความนี้เกี่ยวกับวิธีอ่านไฟล์ในสคริปต์ทุบตีโดยใช้ while loop . การอ่านไฟล์เป็นการดำเนินการทั่วไปในการเขียนโปรแกรม คุณควรคุ้นเคยกับวิธีการต่างๆ และวิธีการใช้งานที่มีประสิทธิภาพมากกว่า ใน bash งานเดียวสามารถทำได้หลายวิธี แต่มีวิธีที่ดีที่สุดในการทำงานให้เสร็จและเราควรปฏิบัติตามนั้นเสมอ

ก่อนดูวิธีการอ่านเนื้อหาไฟล์โดยใช้ while loop เป็นไพรเมอร์ด่วนเกี่ยวกับวิธีการทำงานของ while loop while loop ประเมินเงื่อนไขและวนซ้ำชุดโค้ดที่กำหนดเมื่อเงื่อนไขเป็นจริง

while [ CONDITION ]
do
    code block
done

มาทำลาย ในขณะที่วน ไวยากรณ์

  • ขณะวนซ้ำ ควรเริ่มต้นด้วยคีย์เวิร์ด while ตามด้วยเงื่อนไข
  • A เงื่อนไข ควรอยู่ภายใน [ ] หรือ [[ ]] . เงื่อนไขควรคืนค่าเป็นจริงเสมอเพื่อให้ดำเนินการวนซ้ำ
  • บล็อกโค้ดจริงจะอยู่ระหว่าง do และเสร็จแล้ว .
NUMBER=0

while [[ $NUMBER -le 10 ]]
do
    echo " Welcome ${NUMBER} times "
    (( NUMBER++ ))
done
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

นี่เป็นตัวอย่างง่ายๆ โดยที่ วนรอบ ดำเนินการจนถึง NUMBER ไม่เกิน 10 และพิมพ์คำสั่ง echo

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

# SYNTAX
while read VARIABLE
do
    code
done

การวางท่อใน Linux

โดยปกติเราจะใช้คำสั่ง cat เพื่อดูเนื้อหาของไฟล์จากเทอร์มินัล นอกจากนี้ เราจะไพพ์เอาต์พุตของ คำสั่ง cat ไปยังคำสั่งอื่นๆ เช่น grep, sort เป็นต้น

ในทำนองเดียวกัน เราจะใช้ คำสั่ง cat ที่นี่เพื่ออ่านเนื้อหาของไฟล์และไพพ์ไปยัง ชั่วขณะ ห่วง สำหรับการสาธิต ฉันใช้ /etc/passwd ไฟล์ แต่ไม่แนะนำให้ยุ่งกับไฟล์นี้ ดังนั้นให้สำรองไฟล์นี้และเล่นกับมันหากคุณต้องการ

cat /etc/passwd | while read LREAD
do
    echo ${LREAD}
done
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

มาดูรายละเอียดกันว่าจะเกิดอะไรขึ้นเมื่อส่งโค้ดด้านบนนี้

  • แมว /etc/passwd จะอ่านเนื้อหาของไฟล์และส่งผ่านเป็นอินพุตผ่านไปป์
  • อ่าน คำสั่งอ่านแต่ละบรรทัดที่ส่งผ่านเป็นอินพุตจากคำสั่ง cat และเก็บไว้ใน LREAD ตัวแปร.
  • อ่าน คำสั่งจะอ่านเนื้อหาไฟล์จนถึง EOL ถูกตีความ

คุณยังสามารถใช้คำสั่งอื่นๆ เช่น head, tail, และ pipe it to while loop.

head -n 5 /etc/passwd | while read LREAD
do
    echo ${LREAD}
done
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

การเปลี่ยนเส้นทางอินพุตใน Linux

เราเปลี่ยนเส้นทางเนื้อหาของไฟล์ไปที่ while loop โดยใช้ตัวดำเนินการเปลี่ยนเส้นทางอินพุต (<) .

while read LREAD
do
    echo ${LREAD}
done < /etc/passwd | head -n 5
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

คุณยังสามารถเก็บชื่อไฟล์ไว้ในตัวแปรและส่งผ่านตัวดำเนินการเปลี่ยนเส้นทางได้

FILENAME="/etc/passwd"

while read LREAD
do
    echo ${LREAD}
done < ${FILENAME}
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

คุณยังสามารถส่งชื่อไฟล์เป็นอาร์กิวเมนต์ให้กับสคริปต์ของคุณได้

while read LREAD
do
    echo ${LREAD}
done < $1 | head -n 5
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

ตัวคั่นฟิลด์ภายใน

คุณสามารถทำงานกับรูปแบบไฟล์ประเภทต่างๆ (CSV , TXT , JSON ) และคุณอาจต้องการแยกเนื้อหาของไฟล์ตามตัวคั่นที่กำหนดเอง ในกรณีนี้ คุณสามารถใช้ “ตัวคั่นฟิลด์ภายใน (IFS) ” เพื่อแบ่งเนื้อหาของไฟล์และเก็บไว้ในตัวแปร

ให้ฉันสาธิตวิธีการทำงาน ลองดูที่ /etc/passwd ไฟล์ที่มีเครื่องหมายโคลอน (:) เป็นตัวคั่น ตอนนี้คุณสามารถแยกแต่ละคำออกจากบรรทัดและเก็บไว้ในตัวแปรแยกต่างหากได้

ในตัวอย่างด้านล่าง ฉันกำลังแยก /etc/passwd ไฟล์ที่มีเครื่องหมายทวิภาคเป็นตัวคั่นของฉันและจัดเก็บแต่ละรายการแยกออกเป็นตัวแปรต่างๆ

while IFS=":" read A B C D E F G
do
    echo ${A}
    echo ${B}
    echo ${C}
    echo ${D}
    echo ${E}
    echo ${F}
    echo ${G}
done < /etc/passwd
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

ฉันแสดงเส้นแบ่งเพียงบรรทัดเดียวในภาพหน้าจอด้านบนโดยพิจารณาจากขนาดภาพหน้าจอ

เว้นบรรทัดใน Linux

บรรทัดว่างจะไม่ถูกละเว้นเมื่อคุณ วนซ้ำ ผ่านเนื้อหาไฟล์. เพื่อแสดงสิ่งนี้ ฉันได้สร้างไฟล์ตัวอย่างที่มีเนื้อหาด้านล่าง มี 4 บรรทัดและบรรทัดว่างไม่กี่บรรทัด ได้แก่ ช่องว่างนำหน้า ช่องว่างสีขาวต่อท้าย อักขระแท็บในบรรทัดที่ 2 และอักขระยกเว้นบางตัว (\n และ \t )

วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop
while read LREAD
do
    echo ${LREAD}
done < testfile
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

ดูผลลัพธ์บรรทัดว่างจะไม่ถูกละเว้น นอกจากนี้ สิ่งที่น่าสนใจที่ควรทราบก็คือ อ่าน . ตัดช่องว่างสีขาวอย่างไร สั่งการ. วิธีง่ายๆ ในการละเว้นบรรทัดว่างเมื่ออ่านเนื้อหาไฟล์คือการใช้ตัวดำเนินการทดสอบด้วย -z แฟล็กที่ตรวจสอบว่าความยาวสตริงเป็นศูนย์หรือไม่ คราวนี้มาทำตัวอย่างเดิมซ้ำกัน แต่คราวนี้กับโอเปอเรเตอร์ทดสอบ

while read LREAD
do
    if [[ ! -z $LREAD ]]
    then
        echo ${LREAD} 
    fi
done < testfile
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

จากเอาต์พุต คุณจะเห็นบรรทัดว่างถูกละเว้น

ตัวละครหนี

อักขระ Escape เช่น \n , \t , \c จะไม่ถูกพิมพ์เมื่ออ่านไฟล์ เพื่อแสดงสิ่งนี้ ฉันใช้ไฟล์ตัวอย่างเดียวกันซึ่งมีอักขระหลีกไม่กี่ตัว

วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop
while read LREAD
do
    echo ${LREAD}
done < testfile
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

คุณสามารถเห็นได้จากอักขระหลีกเอาต์พุตสูญเสียความหมายและมีเพียง n และ ถูกพิมพ์แทน \n และ \t . คุณสามารถใช้ -r เพื่อป้องกันการตีความแบ็กสแลช

while read -r LREAD
do
    echo ${LREAD}
done < testfile
วิธีต่างๆ ในการอ่านไฟล์ใน Bash Script โดยใช้ While Loop

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