2013-08-18 124 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)。