如何控制for迴圈?

如何控制for迴圈?

假設我們有以下「for 迴圈」:

#!/bin/bash
for i in $(cat test_file); do 
echo $i
done

文字檔案的內容是父資料夾中的資料夾名稱

如果text_file包含10000個條目(即變數i),我如何告訴「for循環」在每10個「echo」之間休眠10秒。換句話說,當 for 迴圈讀取 text_file 中的變數 i 時,如何控制 for 迴圈在每個特定時間段可以執行的變數數量?所以輸出如下:

   Variable #1
   Variable #2
   Variable #3
   .
   .
   .
   .
   sleep 10
    Variable #11
    Variable #12
    Variable #13
   .
   .       .

答案1

使用以下內容巴什腳本 (每 10 個「迴聲」之間休眠 10 秒):

test.sh是腳本的測試名稱

#!/bin/bash
while ((++i)); read -r line
do
    echo "$line"
    if (( "$i" % 10 == 0)) 
    then
        sleep 10
    fi
done < $1

用法

bash test.sh test_file

while ((++i))-i每次read -r line從輸入返回一行時都會增加計數器

if (( "$i" % 10 == 0))- 檢查目前行號是否i可以整除10(意味著執行流程到達接下來的 10 行)

sleep 10- 暫停腳本 10 秒

答案2

xargs -L 10 sh -c 'printf "%s\n" "$@"; sleep 10' sh < test_file

在職的

  • xargswith-L會一次讀取 10 行並將它們傳遞給sh -c指令。第一個參數被用作程式名稱,我們將放置一個虛擬名稱sh。然後這 10 行將sh作為「$@」可用,我們可以做任何我們想做的事情。在這裡我們只是列印它們。然後我們sleep持續10秒。之後xargs將傳遞下一個 10 部分,並重​​複此循環,直到用完 test_file 中的謊言為止。

相關內容