Mẹo bash Linux. Nhiều cách để lặp bằng cách sử dụng bash

Trên Linux, có nhiều cách để lặp qua dữ liệu bằng cách sử dụng bash, cũng như nhiều cách để tạo dữ liệu sẽ được lặp qua

  • A spiraling clock marks the passage of time.Hình ảnh OGphoto / Getty

    Vỏ bash cung cấp một chức năng tuyệt vời khi viết tập lệnh. Điều này bao gồm nhiều cách để lặp qua một đống dữ liệu để bạn có thể hoàn thành nhiều việc chỉ với một lần chạy tập lệnh. Cho dù bạn đang lặp qua một nhóm lớn các giá trị số, ngày trong tuần, tên người dùng, từ, tệp hoặc hoàn toàn khác, bash có một tùy chọn có thể giúp bạn dễ dàng thực hiện

    vòng lặp for, while và until

    Điều đầu tiên bạn cần biết về vòng lặp trong bash là có một số lệnh cơ bản để sử dụng. Vòng lặp while sẽ lặp miễn là một số điều kiện cụ thể còn đúng. Vòng lặp until sẽ lặp cho đến khi một điều kiện nào đó trở thành đúng và vòng lặp for sẽ chạy qua một loạt giá trị bất kể nguồn gốc của chúng

    Ví dụ: sử dụng while, bạn có thể lặp trong khi một số nhỏ hơn 100, lặp qua các ngày còn lại trong tháng như minh họa trong tập lệnh bên dưới (trong đó chúng tôi lấy ngày hiện tại bằng lệnh date và ngày cuối cùng từ ngày cuối cùng

    #/bin/bash
    
    # day of month
    day=`date | awk '{print $3'}`
    # number of days in month
    numdays=`cal | tail -2 | head -1 | awk '{print $NF}'`
    
    while [ $day -le $numdays ]
    do
        echo $day
        ((day++))
    done
    

    Khi chúng tôi chạy tập lệnh này, chúng tôi sẽ thấy một cái gì đó như thế này

    $ remaining_days
    27
    28
    29
    30
    

    Tập lệnh tiếp theo này lặp lại cho đến khi đồng nghiệp đăng nhập. Miễn là số lần đăng nhập của người dùng bằng 0 (tôi. e. , anh ấy hoặc cô ấy chưa đăng nhập), chúng tôi hiển thị “đang đợi” và sau đó đợi thêm 60 giây. Sau khi người dùng đăng nhập, vòng lặp while sẽ thoát và trong vòng 60 giây tiếp theo, một thông báo sẽ hiển thị xác nhận sự hiện diện đăng nhập của người dùng

    #!/bin/bash
    
    echo -n "user to wait for> "
    read user
    
    while [ `who | grep $user | wc -l` == 0 ]
    do
        echo waiting
        sleep 60
    done
    
    echo $user is online
    

    Phiên bản vòng lặp cho đến khi tập lệnh rất giống nhau

    #!/bin/bash
    
    echo -n "user to wait for> "
    read user
    
    until [ `who | grep $user | wc -l` -gt 0 ]
    do
        echo waiting
        sleep 60
    done
    

    Trong các vòng lặp for, chúng tôi chạy qua một loạt các giá trị, nhưng có nhiều lệnh mà bạn có thể sử dụng để tạo các giá trị đó

    Các lệnh trong khi và cho đến khi được giải thích thêm trong Cách lặp lại lệnh Linux cho đến khi thành công

    Vòng qua các chữ cái và số

    Bạn có thể lặp qua một chuỗi số hoặc chữ cái bằng cách chỉ định một dải giá trị trong {bắt đầu. stop} định dạng như trong các ví dụ bên dưới. Lưu ý rằng bạn có thể bắt đầu với bất kỳ giá trị nào bạn muốn. Bạn không cần phải bắt đầu bằng chữ “a” hoặc “0”

    $ for letter in {a..f}; do   echo $letter; done
    a
    b
    c
    d
    e
    f
    

    Trong ví dụ tiếp theo này, chúng ta bắt đầu với 5, không phải 1, và tránh dấu xuống dòng bằng lệnh echo -n

    #!/bin/bash
    
    echo -n "user to wait for> "
    read user
    
    until [ `who | grep $user | wc -l` -gt 0 ]
    do
        echo waiting
        sleep 60
    done
    
    0

    Bạn thậm chí có thể đảo ngược thứ tự của các số hoặc chữ cái nếu bạn muốn. Dưới đây là một vài ví dụ

    #!/bin/bash
    
    echo -n "user to wait for> "
    read user
    
    until [ `who | grep $user | wc -l` -gt 0 ]
    do
        echo waiting
        sleep 60
    done
    
    1

    Vòng lặp mãi mãi

    Cách dễ nhất để lặp mãi mãi là sử dụng vòng lặp “while true”. Vòng lặp sẽ chỉ ngừng chạy nếu bạn tắt nó – ví dụ: với ^C. Nếu nó được bao gồm trong tập lệnh đang chạy trong nền, bạn có thể sử dụng lệnh tiêu diệt (e. g. , kill 654321) để chấm dứt tập lệnh

    #!/bin/bash
    
    echo -n "user to wait for> "
    read user
    
    until [ `who | grep $user | wc -l` -gt 0 ]
    do
        echo waiting
        sleep 60
    done
    
    2

    Thông tin thêm về vòng lặp mãi mãi có sẵn tại Cách lặp mãi mãi trong bash trên Linux

    Thoát khỏi các vòng lặp với ngắt và tiếp tục

    Lệnh ngắt và tiếp tục cho phép bạn thoát hoàn toàn khỏi vòng lặp (ngắt) hoặc bắt đầu lại ở đầu vòng lặp (tiếp tục), bỏ qua bất kỳ lệnh nào giữa lệnh tiếp tục và kết thúc vòng lặp

    Các lệnh ngắt và tiếp tục được giải thích chi tiết hơn tại Sử dụng lệnh ngắt và tiếp tục để thoát khỏi các vòng lặp

    Lệnh fold có thể được sử dụng để chia tệp hoặc chuỗi thành các phần có cùng kích thước. Độ dài mặc định là 80 ký tự. Trong ví dụ này, chúng tôi chia chuỗi thành các đoạn 11 ký tự với tùy chọn -c11 (11 ký tự)

    $ fold -c11 trythis
    This file h
    as a few ri
    diculously
    long charac
    ter strings
    . Oh, well.
    

    Tuy nhiên, khi bạn sử dụng lệnh fold trong vòng lặp for, bạn cần nhớ rằng bất kỳ chuỗi ký tự kết quả nào chứa khoảng trống sẽ dẫn đến một hoặc nhiều vòng lặp bổ sung vì for ngắt trên mỗi chuỗi được phân tách bằng khoảng trống

    #!/bin/bash
    
    echo -n "user to wait for> "
    read user
    
    until [ `who | grep $user | wc -l` -gt 0 ]
    do
        echo waiting
        sleep 60
    done
    
    4

    Bạn có thể tìm thêm thông tin về lệnh nếp gấp tại Sử dụng nếp gấp để làm cho văn bản dễ đọc hơn và Sử dụng lệnh nếp gấp để điều khiển các vòng lặp

    Lặp đi lặp lại từng từ

    Để lặp qua danh sách các từ bằng vòng lặp for, bạn có thể chạy lệnh như bên dưới. Lưu ý rằng dấu nháy đơn cần được thoát để không bị hiểu là phần đầu của chuỗi

    $ remaining_days
    27
    28
    29
    30
    
    0

    Nếu bạn muốn lặp qua các tháng trong năm, bạn có thể sử dụng lệnh như thế này

    $ remaining_days
    27
    28
    29
    30
    
    1

    Lệnh trên sử dụng lệnh locale để lấy danh sách các tháng và sed để ngắt dòng được phân tách bằng dấu chấm phẩy thành các tháng riêng lẻ

    Gói (lại

    Vòng lặp trong tập lệnh và trên dòng lệnh trên Linux rõ ràng là một trong những kỹ thuật tốt nhất để hoàn thành nhiều việc trong một khoảng thời gian ngắn và tốn ít công sức nhất, đặc biệt nếu bạn biến các vòng lặp của mình thành tập lệnh mà bạn có thể chạy thường xuyên.

    Tiếp theo đọc cái này

    • 9 chứng chỉ Wi-Fi thúc đẩy sự nghiệp
    • MPLS là gì và tại sao nó vẫn chưa chết?
    • 11 cách liệt kê và sắp xếp file trên Linux
    • 5 trình quét lỗ hổng mạng miễn phí
    • Cách đo tốc độ Wi-Fi doanh nghiệp

    Có liên quan

    • Linux

    Sandra Henry-Stocker đã quản trị hệ thống Unix hơn 30 năm. Cô ấy mô tả mình là "USL" (Unix là ngôn ngữ thứ hai) nhưng nhớ đủ tiếng Anh để viết sách và mua đồ tạp hóa. Cô ấy sống ở vùng núi ở Virginia, nơi mà khi không làm việc với hoặc viết về Unix, cô ấy sẽ đuổi những con gấu ra khỏi máng ăn cho chim của cô ấy

    vòng lặp bash là gì?

    Vòng lặp bash for là một câu lệnh ngôn ngữ lập trình bash cho phép mã được thực thi lặp đi lặp lại . Một vòng lặp for được phân loại là một câu lệnh lặp i. e. đó là sự lặp lại của một quy trình trong tập lệnh bash. Ví dụ: bạn có thể chạy lệnh hoặc tác vụ UNIX 5 lần hoặc đọc và xử lý danh sách tệp bằng vòng lặp for.

    Làm thế nào để lặp một lệnh trong bash?

    Để chứng minh, hãy thêm đoạn mã sau vào tập lệnh Bash. #. /bin/bash # Vòng lặp for vô tận với break i=0 for (( ; ; )) do echo "Lặp lại. ${i}" (( i++ )) if [[ i -gt 10 ]] then break; fi done echo "Xong. "