JSON bu formatta içine
date -u +%Y-%m-%d:%H:%M:%S //date and time
lsb_release -a //os distro version
ifconfig -a //ip info
:
Amacım bu elde etmektir Bash'in kendisi JSON desteği içermiyor. Böylece uygunluğunu garanti etmek, sen inşa JSON ayrıştırma ve kuşak desteği ile harici bir programı kullanmak gerekir jq bunlardan biridir ve aşağıda kullanır built-in regex desteği:.
jq --raw-input \
--arg date "$(date)" \
--arg osver "$(lsb_release -a)" \
'{"date": $date,
"osver": $osver,
"ip_info": [inputs |
capture("^[0-9]+: (?<ifname>[^[:space:]]+)[[:space:]]+inet (?<addr>[^[:space:]/]+)(/(?<masklen>[[:digit:]]+))?")
]
}' \
< <(ip -o addr list | grep 'inet ')
Bu kodu görün eylem on JQPlay. Eğer Linux dağıtımı yerleşik olmayan araçlar yükleyemiyorsan
, Python düşünün:
#!/bin/bash
# ^^^^ - important, not /bin/sh; this uses some bash-only syntax
py_code=$(cat <<'EOF'
import json, re, sys
content={'ip_info': []}
for k, v in [ arg.split('=', 1) for arg in sys.argv[2:] if '=' in arg ]:
content[k]=v
ip_re = re.compile(r'^[0-9]+:\s+(?P<ifname>\S+)\s+inet (?P<addr>[^/\s]+)(?:/(?P<masklen>\d+))?')
for line in open(sys.argv[1]).readlines():
m = ip_re.match(line)
if not m: raise "NOOOO"
content['ip_info'].append({
'ifname': m.groups('ifname'),
'addr': m.groups('addr'),
'masklen': m.groups('masklen'),
})
print json.dumps(content)
EOF
)
python -c "$py_code" \
<(ip -o addr list | grep 'inet ') \
"date=$(date)" "osver=$(lsb_release -a)"
jq - https://stedolan.github.io/jq/ - senin arkadaşın . –
Ayrıca, 'ifconfig' kullanmayın; On yıldan fazla bir süredir hiç kimsenin elinde olmayan eski bir araç. IP'leri Linux'ta ağ kümesinin yeni ve modern bölümleriyle çalışan bir şekilde listelemek istiyorsanız, 'ip -o addr list' komutunu kullanın. –
... btw, 'gateway', ifconfig -a'nın çıktısında mevcut değil. Yönlendirme tablosu arabirime özgü olmadığından, bunların bir arada saklanmasını/yönetilmesini beklemez ... –