루프에 값을 저장하고 스크립트를 실행할 때마다 비교합니다.

루프에 값을 저장하고 스크립트를 실행할 때마다 비교합니다.

설명하다

안녕하세요,

일부 명령을 반복하고 해당 출력을 파일에 저장하려고 합니다. 이러한 명령을 반복하는 동안 출력을 저장하는 파일도 확인하여 명령을 반복하는 동안 파일에서 비교할 수 있습니다. 마지막으로 루프 명령의 출력이 이전에 파일에 저장된 출력과 일치하는지 확인합니다.(또한 파일에 출력이 포함되어 있지 않은지 확인하고 나중에 다시 비교할 수 있도록 파일에 추가하십시오)

/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

따라서 이 두 비트의 코드가 있으므로 이제 코드의 첫 번째 비트를 사용하여 명령을 반복하거나 파일과 비교할 수 있도록 이를 하나의 스크립트로 결합하고 싶습니다 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

나의 두 번째 (그리고 또 다른 실패) 시도;

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

내가 뭘 잘못했나요?

관련 정보