为什么变量要递增?
Why is variable being incremented?
谁能帮我弄清楚为什么我的脚本中的变量“$valorbase”会递增。当“$valorbase=8”时,它应该继续下一行的过程,尽管它只发生在第一行。然后它开始递增数字并且在达到值 8 时不停止。
谢谢!
#!/bin/bash
while read -r line <&3
do
valorbase=8
valor=0
echo "$line"
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -ge 1 ]]
then
echo "Valor da soma > que, ou = ao valor base"
echo "Repete comando para a linha"
else [[ $var -lt 1 ]]
until [[ $var -eq 1 ]]
do
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -eq 1 ]]
then
> soma.txt
else
:
fi
done
fi
done 3<resultado.txt 5>soma.txt 6>partidasdobradas.txt
resultado.txt
TEST| 31|02/05/2015|6.1.1.01.001|2.1.1.01.005||8.100|DIVERSOS|||N||| ||S|CB|||05|||||||31.000|N|N|||0.000|
TEST| 34|03/05/2015|6.1.1.01.002|2.1.1.01.005||6.900|DIVERSOS|||N||| ||S|CB|||05|||||||34.000|N|N|||0.000|
TEST| 36|03/05/2015|6.1.1.01.002|2.1.1.01.005||8.900|DIVERSOS|||N||| ||S|CB|||05|||||||36.000|N|N|||0.000|
TEST| 38|04/05/2015|6.1.1.01.001|2.1.1.01.005||13.490|DIVERSOS|||N||| ||S|CB|||05|||||||38.000|N|N|||0.000|
TEST| 64|12/05/2015|6.1.1.01.001|2.1.1.01.005||6.780|DIVERSOS|||N||| ||S|CB|||05|||||||64.000|N|N|||0.000|
当您在循环内使用 >&5
写入 soma.txt
时,它会在文件的当前位置写入文件。当您使用 > soma.txt
截断文件时,不会重置当前位置,因此以后的写入会进入文件的中间,开头有一堆空值。
你应该在循环之前截断文件,然后使用5>>soma.txt
作为循环的重定向,所以它会以append方式写入。这将使它自动搜索到文件的当前末尾。
#!/bin/bash
>soma.txt
while read -r line <&3
do
valorbase=8
valor=0
echo "$line"
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -ge 1 ]]
then
echo "Valor da soma > que, ou = ao valor base"
echo "Repete comando para a linha"
else [[ $var -lt 1 ]]
until [[ $var -eq 1 ]]
do
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -eq 1 ]]
then
> soma.txt
else
:
fi
done
fi
done 3<resultado.txt 5>>soma.txt 6>partidasdobradas.txt
谁能帮我弄清楚为什么我的脚本中的变量“$valorbase”会递增。当“$valorbase=8”时,它应该继续下一行的过程,尽管它只发生在第一行。然后它开始递增数字并且在达到值 8 时不停止。
谢谢!
#!/bin/bash
while read -r line <&3
do
valorbase=8
valor=0
echo "$line"
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -ge 1 ]]
then
echo "Valor da soma > que, ou = ao valor base"
echo "Repete comando para a linha"
else [[ $var -lt 1 ]]
until [[ $var -eq 1 ]]
do
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -eq 1 ]]
then
> soma.txt
else
:
fi
done
fi
done 3<resultado.txt 5>soma.txt 6>partidasdobradas.txt
resultado.txt
TEST| 31|02/05/2015|6.1.1.01.001|2.1.1.01.005||8.100|DIVERSOS|||N||| ||S|CB|||05|||||||31.000|N|N|||0.000|
TEST| 34|03/05/2015|6.1.1.01.002|2.1.1.01.005||6.900|DIVERSOS|||N||| ||S|CB|||05|||||||34.000|N|N|||0.000|
TEST| 36|03/05/2015|6.1.1.01.002|2.1.1.01.005||8.900|DIVERSOS|||N||| ||S|CB|||05|||||||36.000|N|N|||0.000|
TEST| 38|04/05/2015|6.1.1.01.001|2.1.1.01.005||13.490|DIVERSOS|||N||| ||S|CB|||05|||||||38.000|N|N|||0.000|
TEST| 64|12/05/2015|6.1.1.01.001|2.1.1.01.005||6.780|DIVERSOS|||N||| ||S|CB|||05|||||||64.000|N|N|||0.000|
当您在循环内使用 >&5
写入 soma.txt
时,它会在文件的当前位置写入文件。当您使用 > soma.txt
截断文件时,不会重置当前位置,因此以后的写入会进入文件的中间,开头有一堆空值。
你应该在循环之前截断文件,然后使用5>>soma.txt
作为循环的重定向,所以它会以append方式写入。这将使它自动搜索到文件的当前末尾。
#!/bin/bash
>soma.txt
while read -r line <&3
do
valorbase=8
valor=0
echo "$line"
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -ge 1 ]]
then
echo "Valor da soma > que, ou = ao valor base"
echo "Repete comando para a linha"
else [[ $var -lt 1 ]]
until [[ $var -eq 1 ]]
do
echo "Valor:"
read -r valor
echo "$valor" >&5
echo "||||||""$valor""|" >&6
valordasoma=$(awk -F"|" '{ sum += } END { print sum }' < soma.txt)
var=$(awk -v o1=$valordasoma -v t1=$valorbase 'BEGIN { print (o1 >= t1)?"1":"0" }' < soma.txt)
if [[ $var -eq 1 ]]
then
> soma.txt
else
:
fi
done
fi
done 3<resultado.txt 5>>soma.txt 6>partidasdobradas.txt