Linux Command Line Script
Command Line Variable
리눅스에서 Command Line Variable을 사용하기 위해서는 "변수명=값" 을 사용하고, 그 변수명은 다른 Command Line 명령 안에서 사용하기 위해서는 "$변수명"을 사용한다. 기존의 변수를 Clear하기 위해서는 unset 명령을 사용한다.
$ ADDR="tb1q4m69lp7vexrtsuj9hwt7x78dnrknjkur2uektv" $ echo $ADDR $ unset ADDR //변수 삭제
어떤 명령을 실행하고 그 결과를 변수에 넣기 위해서는 "변수명=$(명령어)" 혹은 "변수명=`명령어` 를 사용한다.
$ ADDR1=$(bitcoin-cli getnewaddress) $ ADDR2=`bitcoin-cli getnewaddress` //위와 동일 $ echo $ADDR1
JQ
jq는 Lightweight command line JSON parser 이로서, JSON RPC가 리턴하는 JSON 데이타 중 일부 값을 발췌할 때 유용하게 사용될 수 있다. JQ는 다음과 같이 설치할 수 있다. (참고: https://stedolan.github.io/jq/)
$ sudo apt-get install jq
bitcoin-cli 등과 같은 JSON RPC 클라이언트는 실행 결과값을 JSON 으로 출력할 수 있다. 예를 들어, getaddressinfo 명령은 다음과 같은 JSON 텍스트를 출력한다.
$ bitcoin-cli getaddressinfo tb1q4m69lp7vexrtsuj9hwt7x78dnrknjkur2uektv { "address": "tb1q4m69lp7vexrtsuj9hwt7x78dnrknjkur2uektv", "scriptPubKey": "0014aef45f87ccc986b87245bb97e378ed98ed395b83", "ismine": true, "solvable": true, "desc": "wpkh([9d1456ef/0'/0'/21']03ac9c07ce0c91056018c238dafd933c7bc709ba8b79d9bf499fc53634eb6b6bb6)#g4v26e0y", "iswatchonly": false, "isscript": false, "iswitness": true, "witness_version": 0, "witness_program": "aef45f87ccc986b87245bb97e378ed98ed395b83", "pubkey": "03ac9c07ce0c91056018c238dafd933c7bc709ba8b79d9bf499fc53634eb6b6bb6", "ischange": false, "timestamp": 1645034898, "hdkeypath": "m/0'/0'/21'", "hdseedid": "52918dba8457ce58b0ac0292e0c04b146a66cc84", "hdmasterfingerprint": "9d1456ef", "labels": [ "" ] }
이 JSON 텍스트를 Pipe를 통해 jq에 넘기고 이 중 특정 필드(예: pubkey)를 발췌할 수 있다. 아래는 이러한 예를 표시한 것인데, -r 은 출력을 JSON이 아닌 문자열로 출력하는 옵션이고, '.pubkey' 는 JSON 루트(.) 밑의 pubkey 필드를 의미한다. 만약 jq -r '.' 와 같이 쓰면, JSNO 문자열 전체를 출력할 것이다. 여기서 Dot(.)는 JSON의 루트를 의미하며, 그 밑에 필드명을 적어 필터링 할 수 있다. 아래 (2)번 예는 jq 결과값을 변수에 담는 예이다.
(1) jq 사용 $ bitcoin-cli getaddressinfo tb1q4m69lp7vexrtsuj9hwt7x78dnrknjkur2uektv | jq -r '.pubkey' 03ac9c07ce0c91056018c238dafd933c7bc709ba8b79d9bf499fc53634eb6b6bb6 (2) 변수에 jq 결과 담기 $ PUBKEY=$(bitcoin-cli getaddressinfo tb1q4m69lp7vexrtsuj9hwt7x78dnrknjkur2uektv | jq -r '.pubkey')
jq는 JSON Array의 경우 '.[0]' 와 같이 원하는 인덱스(zero based)를 쓸 수 있다. 아래는 listreceivedbyaddress 명령이 리턴하는 결과 배열 중 첫번째 요소를 리턴하는 것이다.
$ bitcoin-cli listreceivedbyaddress | jq -r '.[0]'
배열 인덱스를 사용한 결과에서 다시 특정 필드값을 얻기 위해서는 아래와 같이 | 필터링을 사용할 수 있다.
$ bitcoin-cli listreceivedbyaddress | jq -r '.[0] | .amount'