Bash:每次运行该脚本时,都会从脚本中增加一个变量

时间:2013-08-18 06:23:12

标签: bash increment auto-increment

我希望每次运行该脚本时,脚本中的变量都会递增。像这样:

#!/bin/bash    
n=0   #the variable that I want to be incremented
next_n=$[$n+1]
sed -i "2s/.*/n=$next_n/" ${0}
echo $n

将完成这项工作,但如果我在设置变量的行之前向脚本中添加其他行并且忘记更新行sed -i "2s/.*/n=$next_n/" ${0},那就不太好了。

此外,我更喜欢不使用另一个保存变量值的文件。

其他一些想法?

2 个答案:

答案 0 :(得分:6)

#!/bin/bash    
n=0;#the variable that I want to be incremented
next_n=$[$n+1]
sed -i "/#the variable that I want to be incremented$/s/=.*#/=$next_n;#/" ${0}
echo $n

答案 1 :(得分:5)

脚本在子shell中运行,这意味着一旦脚本结束就会忘记它的变量,并且它们不会传播到调用它的父shell。要在当前shell中运行命令列表,您可以source脚本,也可以编写函数。在这样的脚本中,简单

(( n++ ))

可以工作 - 但只有从同一个shell调用时才有效。如果脚本应该在不同的shell中工作,或者甚至在关闭再打开机器之后,将值保存在文件中是最简单和最好的选择。但是,将变量值存储在不同的文件中可能更容易,而不是脚本本身:

[[ -f saved_value ]] || echo 0 > saved_value
n=$(< saved_value)
echo $(( n + 1 )) > saved_value

运行时更改脚本可能会产生奇怪的后果,尤其是当您更改脚本的大小时(可能会发生在9→10)。