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 Show
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 done0 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 done1 Vòng lặp mãi mãiCá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 done2 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ụcLệ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 done4 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 300 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 301 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ạiVò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
Có liên quan
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. "
|