설명하다
안녕하세요,
일부 명령을 반복하고 해당 출력을 파일에 저장하려고 합니다. 이러한 명령을 반복하는 동안 출력을 저장하는 파일도 확인하여 명령을 반복하는 동안 파일에서 비교할 수 있습니다. 마지막으로 루프 명령의 출력이 이전에 파일에 저장된 출력과 일치하는지 확인합니다.(또한 파일에 출력이 포함되어 있지 않은지 확인하고 나중에 다시 비교할 수 있도록 파일에 추가하십시오)
/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
내가 뭘 잘못했나요?