2012-03-28 12 views
13

永続的な変数値を使用してBashスクリプトを作成できますか?実行中の最後の値から値を保持するBashスクリプトの変数

たとえば、スクリプトを最初に実行したとき(特定の制限時間内)に変数を0に初期化し、スクリプトが実行されるたびに変数が自動的に増加します。

+0

bashスクリプトでキー/値のデータベース書き込み。 https://github.com/damphat/kv-bash :) – damphat

答えて

14

私は数日前に同じ問題を抱えていたと私はので、仕事をするために自分自身のツールを書いたあなたがすることはできませんが、あなたはそれを

#!/bin/sh 

# if we don't have a file, start at zero 
if [ ! -f "/tmp/value.dat" ] ; then 
    value=0 

# otherwise read the value from the file 
else 
    value=`cat /tmp/value.dat` 
fi 

# increment the value 
value=`expr ${value} + 1` 

# show it to the user 
echo "value: ${value}" 

# and save it for next time 
echo "${value}" > /tmp/value.dat 
3

状態をファイルのどこかに保存する必要があります。そのトリックは、ユーザーが書き込むことができるどこかに置くことです。

yourscriptvar=0 

if [ -e "$HOME/.yourscriptvar" ] ; then 
    yourscriptvar=$(cat "$HOME/.yourscriptvar") 
fi 

# do something in your script 

#save it output the file 
echo $yourscriptvar > "$HOME/.yourscriptvar" 
+1

ここにはbash-ism: 'yourscriptvar = $(<" $ HOME/.yourscriptvar ")'があります。ドキュメントはこちら[http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution] –

+0

私はそれが好きです...私はbashのハッカーの私のバッグに入れます。ありがとう –

3

を行うには、ファイルを使用することができます同様のことをする別の方法はありません。

gvarは、各ユーザーが異なるデータ収集を持つ純粋なBashキー値ストアです。レコードはユーザーのホームディレクトリに格納されます。

ここでは、ソースコードから、最も興味深い機能である:

get_variable() { 
    cat $FILE | grep -w $1 | cut -d'=' -f2 
} 

set_variable() { 
    echo $1=$2 >> $FILE 
} 

remove_variable() { 
    sed -i.bak "/^$1=/d" $FILE 
} 
+0

ハッ。あなたはそのような '図書館'のために、それはスピードのために最適化されると思います。例えば ​​'grep'はファイルを引数として取ることができるので、' grep'を使うと 'cat'は不要です。また、 'flock'や何かを使用しないと、並列実行でこれがどのようにうまくいくのだろうか。 – Yeti

+0

@イエティあなたは完全に正しいです、gvarは私の問題を解決したばかりのおもちゃですが、私は前進していません。私はあなたが指摘した同様のことを考えました。ありがとう。 –

関連する問題