簡體   English   中英

Linux在讀取循環時

[英]Linux while read loop

我有以下腳本:

#!/bin/bash

function doPing () {
    pings=0

    #cat /home/scripts/test.txt | while read server ; do
    #while [ $pings -le 3 ] ; do
        echo success1 $pings
        if [ 1 -eq 1 ]; then {
            pings=$(expr $pings + 1)
            echo success- $pings
        } else if [ 1 -eq 2 ]; then {
            pings=$(expr $pings + 1)
            echo not
        } else {
            pings=$(expr $pings + 1)
            echo known
        } fi
        fi

        echo success3 $pings
    done

    echo -e "\nSuccessfully pinged $pings.\n"
}

doPing

test.txt包含幾行服務器名稱,實際上並不重要。

我的問題是,當我取消注釋#while ... ,得到:

success1 0
success- 1
success3 1
success1 1
success- 2
success3 2
success1 2
success- 3
success3 3
success1 3
success- 4
success3 4
success1 4
success- 5
success3 5

Successfully pinged 0.

但是,當我取消注釋#cat ... ,我得到:

success1 0
success- 1
success3 1
success1 1
success- 2
success3 2
success1 2
success- 3
success3 3
success1 3
success- 4
success3 4

Successfully pinged 4.

我如何才能使#while輸出被ping通一些數字,例如#cat ...而不是零? 請幫忙。 謝謝。

問題在於管道創建了一個子shell,並且對子shell中變量的更改不會傳播到父對象。

有關更多信息,請閱讀有關管道變量的解釋

這是我所做的:

...
while read value ; do
...
done < /home/scripts/test.txt
...

…盡管我不知道-rread之后意味着什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM