在bash中格式化增量变量输出

在bash中格式化增量变量输出,bash,while-loop,Bash,While Loop,我遇到了一个相当简单的问题,变量的增量作为连续字符串打印到文件中 下面是代码示例: #!/usr/bin/bash _SesT=`date +%Y\/%m\/%d\ %H\-%M\-%S` n="0" Execution_IT(){ while read $3 do ((n++)) printf $n done < ExecLog.txt } echo "test" && echo $_SesT pri

我遇到了一个相当简单的问题,变量的增量作为连续字符串打印到文件中

下面是代码示例:

#!/usr/bin/bash

_SesT=`date +%Y\/%m\/%d\ %H\-%M\-%S` 

n="0"

Execution_IT(){

    while read $3
    do
        ((n++))
        printf $n 
    done < ExecLog.txt

}

echo "test" && echo $_SesT
printf "Execution $(Execution_IT) Started $_SesT\r\n" >> ExecLog.txt
。。。而不是:

Execution 1 Started 2016/02/08 19-06-44
Execution 2 Started 2016/02/08 19-06-44
Execution 3 Started 2016/02/08 19-06-45...

这是我在尝试
cut-d
后得到的最有效的版本<代码>awk<代码>sed;甚至对于循环,使用类似C的语法
。有一个版本与此非常类似,在读取行时使用
,但输出完全相同。任何建议都将不胜感激。

您的
printf
需要换行:

printf "%d\n" "$n"
或者,或者

echo "$((++n))"

您的
printf
需要换行:

printf "%d\n" "$n"
或者,或者

echo "$((++n))"

据我所知,您只需在文件“ExecLog.txt”中打印一行,特别是最后一行

该行只包含文件中的行数和日期。
这样可以做得更好:

Execution  Started 2016/02/08 19-06-44
Execution 1 Started 2016/02/08 19-06-44
Execution 12 Started 2016/02/08 19-06-44
Execution 123 Started 2016/02/08 19-06-45
Execution 1234 Started 2016/02/08 19-06-45
Execution 12345 Started 2016/02/08 19-06-45
Execution 123456 Started 2016/02/08 19-06-46...
_logfile="ExecLog.txt"

n="$(wc -l <"$_logfile")"      ### count the number of lines in the log file.

_SesT="$(date +%Y\/%m\/%d\ %H\-%M\-%S)"   ### get time just before it is used.

echo "test $_SesT $_logfile"
printf "Execution %s Started %s\r\n" "$n" "$_SesT" | tee -a "$_logfile"
\u logfile=“ExecLog.txt”

n=“$(wc-l据我所知,您只在文件“ExecLog.txt”中打印了一行,特别是最后一行被追加

该行只包含文件中的行数和日期。
这样可以做得更好:

Execution  Started 2016/02/08 19-06-44
Execution 1 Started 2016/02/08 19-06-44
Execution 12 Started 2016/02/08 19-06-44
Execution 123 Started 2016/02/08 19-06-45
Execution 1234 Started 2016/02/08 19-06-45
Execution 12345 Started 2016/02/08 19-06-45
Execution 123456 Started 2016/02/08 19-06-46...
_logfile="ExecLog.txt"

n="$(wc -l <"$_logfile")"      ### count the number of lines in the log file.

_SesT="$(date +%Y\/%m\/%d\ %H\-%M\-%S)"   ### get time just before it is used.

echo "test $_SesT $_logfile"
printf "Execution %s Started %s\r\n" "$n" "$_SesT" | tee -a "$_logfile"
\u logfile=“ExecLog.txt”


n=”$(wc-l你在哪里调用
Execution\u IT
?什么是
Session\u IT
?你的意思是在每一行重新计算
日期,还是在脚本开头只重新计算一次?我在底部复制了错误的函数名,这几乎是一样的。现在我调用Execution\u IT。我还想在每一行打印d/t,so是的,应该是这样。顺便说一句,读取$3的
有什么用?没有任何变量名作为
$3
传递给函数(就像调用函数时,它根本没有参数一样),如果您希望
read
$3
中设置值,那么,它不是这样工作的……但是
$3
在bash中并不表示第3列;它只是表示这一点的awk。您在哪里调用
执行它
?以及
会话
是什么?您的意思是在每行重新计算
日期
,或者只在脚本开头一次?我在底部复制了一个错误的func名称,这几乎是一样的。现在我调用了Execution\u IT。我还想在每一行打印d/t,所以是的,这是应该的。顺便说一句,
读取$3
?你没有任何变量名作为
$3
传递给函数吗(当您调用函数时,它根本没有参数),如果您希望
read
$3
中设置值,那么,它不会这样工作……但是
$3
在bash中并不意味着第3列;它只意味着awk。
$n
,而不是
“$n”
?我们需要字符串拆分和全局扩展吗?(当然,数字IFS值并不常见,但它们可能会出现)。@CharlesDuffy不,我们不需要它们;)我想我们肯定需要在这里拆分字符串。另一件不起作用的事情是这样的:front=${texttext{$back}还回了美元,但那也没发生。有人刚刚向我建议过。@NiU,嗯?“串分裂”,在这种情况下,这意味着如果
IFS=0
,而你的
$n
301
,你将在两行不同的地方打印
3
1
,而不是在一行。我无法想象你为什么会想要它。@NiU我想你在这里说的是其他的东西,不,双间接法没有不起作用。
$n
,而不是
“$n”
?我们需要在这里进行字符串拆分和全局扩展吗?(当然,数字IFS值并不常见,但它们可能会发生)。@CharlesDuffy不,我们不需要在这里;)我想我们肯定需要在这里进行字符串拆分。另一件不起作用的事情是这样的:front=${texttext{$back}还回了美元,但那也没发生。有人刚刚向我建议过。@NiU,嗯?“串分裂”,在这种情况下,这意味着如果
IFS=0
,而你的
$n
301
,你将在两行不同的地方打印
3
1
,而不是在一行。我无法想象你为什么会想要它。@NiU我想你在这里说的是其他的东西,不,双间接法没有“不行。这正是我想要实现的。关于你的第一个例子,我从来没有想过使用tee,甚至只是为了测试。第二个例子做得很好,我只是没有足够的技能去考虑。关于多次执行-我避免了这一点,事先用一个条件语句来拒绝执行在正在进行的一个脚本完成之前,我不会使用任何其他脚本,所以这没关系。谢谢你,这正是我想要完成的。关于你的第一个例子,我从来没有想过使用tee,甚至只是为了测试。第二个例子做得很好,我只是没有足够的技能来考虑。关于多次执行-我是avo事先用一个条件语句来拒绝执行任何其他脚本,直到正在进行的脚本完成,这样就可以了。谢谢