I have the following script:
#!/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 contains a few lines of server names, it does not matter actually.
My problem is that when I uncomment the line #while ...
, I get:
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.
but when I uncomment the line #cat ...
, I get:
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.
How can I make it so that the #while
output will be some number pinged, like #cat ...
, not zero? Please help. Thanks.
The problem is that the pipe creates a subshell and changes to a variable in a subshell does not propagate to the parent.
For more information read this explanation about variables in pipelines .
This is what I did:
...
while read value ; do
...
done < /home/scripts/test.txt
...
… although I do not know what -r
means after read
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.