ループに値を格納し、スクリプトを実行するたびに比較します。

ループに値を格納し、スクリプトを実行するたびに比較します。

説明する

こんにちは、

いくつかのコマンドを繰り返して、その出力をファイルに保存しようとしています。これらのコマンドを繰り返す間に出力を保存するファイルもチェックすることで、コマンドの繰り返し中にファイルで比較できます。最後に、ループコマンドの出力が以前にファイルに保存された出力と一致することを確認します。(また、ファイルに出力が含まれていないことを確認し、後で再比較できるようにファイルに追加してください)

/usr/local/bin/これは、シェルから直接実行できるように、内部の上記のコマンドを繰り返す基本スクリプトです。

#!/bin/bash
wallets=`find /usr/local/bin/ -iname '*-cli'`

for i in $wallets; do
    current_blocks=`$I getblockcount`
    coin_name=${i:15:-4} # I use `:15:-4` here to cut the path and the last 4 characters. (For example it's `/usr/local/bin/bitcoin-cli` so I change it to `bitcoin` only
    echo $coin_name $current_blocks
    echo $coin_name $current_blocks >> blocks.log
done

このエコーは正確な結果を提供します(;に2つの項目があると仮定$wallets)。

bitcoin 1457824
litecoin 759345

これはおおよそファイルから読み取るために使用されるwhileループです。

while read line ; do
    set $line
    echo $1 $2
done < blocks.log

これを実行すると、次の出力も提供されます。

bitcoin 1457824
litecoin 759345

したがって、この2ビットのコードがあるので、コードの最初のビットを使用してコマンドを繰り返すか、ファイルと比較できるように、これを1つのスクリプトにまとめたいと思いますblocks.log(また、ファイルに出力が含まれていないことを確認し、後で再度比較できるようにファイルに追加してください.)

私の最初の(そして失敗した)方法。

for i in $wallets; do

    current_blocks=`$i getblockcount`
    coin_name=${i:15:-4}

    while read line; do
        set $line
        if [ "$1" == "$coin_name" ]; then
            echo "File contains the coin_name, compare the blocks now"
            if (( "$current_blocks" >= "$2" )); then
                echo "Current blocks are greater than the saved blocks"
                echo "Saving the new blocks count now"
                sed -i "s/$1/$1 $current_blocks/" blocks.log
            else
                echo "Current blocks are less than or equals to saved blocks"
            fi
        else
            echo "File does not contain the coin_name, adding it now"
            echo "$coin_name $current_blocks" >> blocks.log
        fi
    done < blocks.log

done

私の2番目の(そして別の失敗)試み。

for i in $wallets; do

    current_blocks=`$i getblockcount`
    coin_name=${i:15:-4}

    read line < blocks.log
    set $line
    if [ "$1" == "$coin_name" ]; then
        echo "File contains the coin_name, compare the blocks now"
        if (( "$current_blocks" >= "$2" )); then
            echo "Current blocks are greater than the saved blocks"
            echo "Saving the new blocks count now"
            # sed -i "s/$1/$1 $current_blocks/" blocks.log
        else
            echo "Current blocks are less than or equals to saved blocks"
        fi
    else
        echo "File does not contain the coin_name, adding it now"
        echo "$coin_name $current_blocks" >> blocks.log
    fi

done

私は何が間違っていましたか?

関連情報