1

次のスクリプトがあります。

#!/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 ...助けてください。ありがとう。

4

2 に答える 2

2

問題は、パイプがサブシェルを作成し、サブシェル内の変数への変更が親に反映されないことです。

詳細については、パイプラインの変数に関するこの説明をお読みください。

于 2013-10-04T15:20:20.950 に答える
0

これは私がしたことです:

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

-r…あとの意味はわかりませんがread

于 2013-10-05T05:19:01.313 に答える