Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Bài viết này là tất cả về cách đọc tệp trong tập lệnh bash bằng cách sử dụng vòng lặp while . Đọc một tập tin là một thao tác phổ biến trong lập trình. Bạn nên làm quen với các phương pháp khác nhau và sử dụng phương pháp nào hiệu quả hơn. Trong cơ bản, một nhiệm vụ đơn lẻ có thể đạt được theo nhiều cách nhưng luôn có một cách tối ưu để hoàn thành nhiệm vụ và chúng ta nên tuân theo nó.

Trước khi xem cách đọc nội dung tệp bằng vòng lặp while , một bản tóm tắt nhanh về cách hoạt động của vòng lặp while. Vòng lặp while đánh giá một điều kiện và lặp qua một bộ mã nhất định khi điều kiện là đúng.

while [ CONDITION ]
do
    code block
done

Hãy phân tích vòng lặp while cú pháp.

  • vòng lặp while nên bắt đầu bằng từ khóa while, theo sau là điều kiện.
  • Một điều kiện nên được kèm theo trong [] hoặc [[]] . Điều kiện phải luôn trả về true để vòng lặp được thực thi.
  • Khối mã thực tế sẽ được đặt giữa do xong .
NUMBER=0

while [[ $NUMBER -le 10 ]]
do
    echo " Welcome ${NUMBER} times "
    (( NUMBER++ ))
done
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Đây là một ví dụ rất đơn giản, trong đó vòng lặp thực thi cho đến NUMBER không lớn hơn 10 và in câu lệnh echo.

Cùng với while chúng tôi sẽ sử dụng đọc lệnh để đọc nội dung của một tập tin theo từng dòng. Dưới đây là cú pháp của cách while đọc các lệnh được kết hợp. Bây giờ có nhiều cách khác nhau để chuyển tệp làm đầu vào và chúng ta sẽ thấy tất cả chúng.

# SYNTAX
while read VARIABLE
do
    code
done

Piping trong Linux

Thông thường chúng ta sẽ sử dụng lệnh cat để xem nội dung của tệp từ terminal. Ngoài ra, chúng tôi sẽ chuyển đầu ra của lệnh cat đến các lệnh khác như grep, sort, v.v.

Tương tự, chúng tôi sẽ sử dụng lệnh cat vào đây để đọc nội dung của tệp và chuyển nó thành while vòng. Để trình diễn, tôi đang sử dụng / etc / passwd nhưng không nên làm rối với tệp này, vì vậy hãy lấy một bản sao lưu của tệp này và chơi với nó nếu bạn muốn.

cat /etc/passwd | while read LREAD
do
    echo ${LREAD}
done
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Hãy phân tích những gì sẽ xảy ra khi mã trên được gửi.

  • cat / etc / passwd sẽ đọc nội dung của tệp và chuyển nó làm đầu vào thông qua đường ống.
  • đọc lệnh đọc từng dòng được truyền dưới dạng đầu vào từ lệnh cat và lưu trữ trong LREAD biến.
  • đọc lệnh sẽ đọc nội dung tệp cho đến khi EOL được diễn giải.

Bạn cũng có thể sử dụng các lệnh khác như head, tail và chuyển nó tới vòng lặp while.

head -n 5 /etc/passwd | while read LREAD
do
    echo ${LREAD}
done
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Chuyển hướng đầu vào trong Linux

Chúng tôi có thể chuyển hướng nội dung của tệp đến vòng lặp while sử dụng toán tử chuyển hướng đầu vào (<) .

while read LREAD
do
    echo ${LREAD}
done < /etc/passwd | head -n 5
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Bạn cũng có thể lưu tên tệp vào một biến và chuyển nó qua toán tử chuyển hướng.

FILENAME="/etc/passwd"

while read LREAD
do
    echo ${LREAD}
done < ${FILENAME}
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Bạn cũng có thể chuyển tên tệp làm đối số cho tập lệnh của mình.

while read LREAD
do
    echo ${LREAD}
done < $1 | head -n 5
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Dấu phân tách trường nội bộ

Bạn có thể làm việc với các loại định dạng tệp khác nhau ( CSV , TXT , JSON ) và bạn có thể muốn tách nội dung của tệp dựa trên dấu phân cách tùy chỉnh. Trong trường hợp này, bạn có thể sử dụng “ Dấu phân tách trường nội bộ (IFS) ”Để tách nội dung của tệp và lưu trữ trong các biến.

Hãy để tôi chứng minh nó hoạt động như thế nào. Hãy xem / etc / passwd tệp có dấu hai chấm (:) làm dấu phân cách. Giờ đây, bạn có thể tách từng từ khỏi một dòng và lưu trữ nó trong một biến riêng biệt.

Trong ví dụ dưới đây, tôi đang tách / etc / passwd tệp có dấu hai chấm làm dấu phân tách của tôi và lưu trữ mỗi phần tách thành các biến khác nhau.

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
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Tôi chỉ hiển thị một dòng chia nhỏ trong ảnh chụp màn hình ở trên xem xét kích thước ảnh chụp màn hình.

Dòng trống trong Linux

Các dòng trống không bị bỏ qua khi bạn lặp lại thông qua nội dung tệp. Để chứng minh điều này, tôi đã tạo một tệp mẫu với nội dung bên dưới. Có 4 dòng và vài dòng trống, khoảng trắng ở đầu, khoảng trắng ở cuối, ký tự tab ở dòng 2 và một số ký tự thoát ( \ n \ t ).

Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop
while read LREAD
do
    echo ${LREAD}
done < testfile
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Xem kết quả, dòng trống không bị bỏ qua. Ngoài ra, một điều thú vị cần lưu ý là cách các khoảng trắng được cắt bởi read yêu cầu. Một cách đơn giản để bỏ qua các dòng trống khi đọc nội dung tệp là sử dụng toán tử kiểm tra với -z cờ để kiểm tra xem độ dài chuỗi có bằng 0 hay không. Bây giờ chúng ta hãy lặp lại cùng một ví dụ nhưng lần này với một toán tử kiểm tra.

while read LREAD
do
    if [[ ! -z $LREAD ]]
    then
        echo ${LREAD} 
    fi
done < testfile
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Bây giờ từ đầu ra, bạn có thể thấy các dòng trống bị bỏ qua.

Ký tự thoát

Các ký tự thoát như \n , \t , \c sẽ không được in khi đọc tệp. Để chứng minh điều này, tôi đang sử dụng cùng một tệp mẫu có ít ký tự thoát.

Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop
while read LREAD
do
    echo ${LREAD}
done < testfile
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Bạn có thể thấy từ các ký tự thoát đầu ra đã mất ý nghĩa và chỉ còn n t được in thay vì \n\t . Bạn có thể sử dụng -r để ngăn việc diễn giải dấu gạch chéo ngược.

while read -r LREAD
do
    echo ${LREAD}
done < testfile
Các cách khác nhau để đọc tệp trong Bash Script bằng While Loop

Đó là nó cho bài viết này. Chúng tôi rất muốn nhận được phản hồi từ bạn nếu có bất kỳ phản hồi hoặc mẹo nào. Phản hồi của bạn là điều giúp chúng tôi tạo ra nội dung tốt hơn. Hãy tiếp tục đọc và tiếp tục ủng hộ.