【问题标题】:Why is variable being incremented?为什么变量要递增?
【发布时间】:2015-09-16 21:05:46
【问题描述】:

有人能帮我弄清楚为什么我的脚本中的变量“$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 += $1 } 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 += $1 } 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

结果.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|

【问题讨论】:

  • 我尝试运行你的脚本,但我不知道我应该在 Valor: 提示符中输入什么。
  • 很抱歉。只需输入值/数字(整数或小数)。
  • 我知道,但我不明白这些数字的含义。
  • 其实这是我正在制作的脚本的一部分,它会读取财务管理软件的报告,对其进行分析并进行一些更改,最终以会计软件接受的格式输出报告。跨度>

标签: bash variables increment


【解决方案1】:

当您在循环内使用&gt;&amp;5 写入soma.txt 时,它会在文件的当前位置写入文件。当您使用&gt; soma.txt 截断文件时,当前位置不会重置,因此未来的写入会进入文件中间,开头有一堆空值。

你应该在循环之前截断文件,然后使用5&gt;&gt;soma.txt作为循环的重定向,所以它将以追加模式写入。这将使它自动寻找到文件的当前结尾。

#!/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 += $1 } 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 += $1 } 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

【讨论】:

  • 巴尔玛,感谢您的帮助。它工作得很好!
猜你喜欢
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2014-12-06
相关资源
最近更新 更多