아래에 이 출력이 있으며 이를 JSON API 형식으로 변환하려고 합니다. 어떻게 해야 하는지 알고 싶습니다.
rock64@rockpro64:~$ sh MACscript.sh
eth0
11:1d:11:11:11:1d
lo
00:00:00:00:00:00
Python 스크립트를 사용해야 합니까, 아니면 쉘 스크립트를 사용하여 수행할 수 있습니까?
이것은 내 MACshell 스크립트입니다.
rock64@rockpro64:~$ cat MACscript.sh
!/bin/bash
getmacifup.sh: Print active NICs MAC addresses
D='/sys/class/net'
for nic in $( ls $D )
do
echo $nic
if grep -q unknown $D/$nic/operstate
then
echo -n ' '
cat $D/$nic/address
fi
done
답변1
일반 bash를 사용하면 다음과 같이 할 수 있습니다.
json=$(
sh MACscript.sh | {
pairs=()
while read interface; read ether; do
pairs+=("\"$interface\":\"$ether\"")
done
IFS=,
echo "{${pairs[*]}}"
}
)
echo "$json"
산출
{"eth0":"11:1d:11:11:11:1d","lo":"00:00:00:00:00:00"}
답변2
다양한 방법을 사용하여 json 값을 얻을 수 있습니다. bash, python, perl...
이 웹사이트에서 이에 대한 유용한 게시물을 찾을 수 있습니다. 그러나 예는 다음과 같습니다.
arr1=($( ls /sys/class/net))
arr2=($( cat /sys/class/net/*/address ))
vars1=(${arr1[@]})
vars2=(${arr2[@]})
len=${#arr1[@]}
printf "{\n"
printf "\t"'"data"'":[\n"
for (( i=0; i<len; i+=1 ))
do
printf "\t{ "'"{#interface}"'":\"${vars1[i]}\",\t"'"{#address}"'":\"${vars2[i]}\"
}"
if [ $i -lt $((len-1)) ] ; then
printf ",\n"
fi
done
printf "\n"
printf "\t]\n"
printf "}\n"
echo
산출:
{
"data":[
{ "{#interface}":"eth0", "{#address}":"00:50:56:a9:c0:81" },
{ "{#interface}":"lo", "{#address}":"00:00:00:00:00:00" }
]
}
이 웹사이트를 사용하여 json의 유효성을 검사할 수 있습니다.https://codebeautify.org/online-json-editor