2013-08-18 90 views
3

我希望每次运行脚本时都要增加一个脚本中的变量。事情是这样的:Bash:每次运行脚本时都会从脚本中增加一个变量

#!/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}

另外我更喜欢不使用其他文件保存变量值。

其他一些想法?

回答

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 
+0

这可能是正确的方式。但对我不起作用。你可以检查你的答案吗? –

+0

嗨,我应该再次在$ .try之前添加\,并确保您声明变量n的行以comment#变量结尾......就像您的示例代码一样。 – eeeyes

+0

之前比较好。问题是,包含'sed'命令的行也被编辑。 –

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)。