获取系统信息
#!/bin/bash
readarray -t array <<< "$(df -h)"
var=$(echo "${array[1]}"| grep -aob '%' | grep -oE '[0-9]+')
echo "${array[3]:$var-3:4}
echo -e "Manufacturer:\t"`cat /sys/class/dmi/id/chassis_vendor`
echo -e "Product Name:\t"`cat /sys/class/dmi/id/product_name`
echo -e "Version:\t"`cat /sys/class/dmi/id/bios_version`
echo -e "Serial Number:\t"`cat /sys/class/dmi/id/product_serial`
echo -e "PC Name:\t"`hostname`
echo -e "Operating System:\t"`hostnamectl | grep "Operating System" | cut
-d ' ' -f5-`
echo -e "Architecture:\t"`arch`
echo -e "Processor Name:\t"`awk -F':' '/^model name/ {print $2}'
/proc/cpuinfo | uniq | sed -e 's/^[ \t]*//'`
echo -e "Memory:\t" `dmidecode -t 17 | grep "Size.*MB" | awk '{s+=$2} END
{print s / 1024 "GB"}'`
echo -e "HDD Model:\t" `cat /sys/block/sda/device/model`
echo -e "System Main IP:\t"`hostname -I`我想像这样显示我的输出
({"Manufacturer":"Lenovo","Product Name":"Thinkpad":"Version":"T590","Serial Number":"1234567890" })发布于 2021-03-26 11:18:42
这是你真正的任务还是很简单的任务?如果是真的,你可以用引号和大括号重写这个脚本,这不是很多工作。请在第三代码行中提到漏掉的结尾双引号。
#!/bin/bash
readarray -t array <<< "$(df -h)"
var=$(echo "${array[1]}"| grep -aob '%' | grep -oE '[0-9]+')
echo "${array[3]:$var-3:4}"
echo -e "({\"Manufacturer\":\""`cat /sys/class/dmi/id/chassis_vendor`"\","
echo -e "\"Product Name\":\""`cat /sys/class/dmi/id/product_name`"\","
echo -e "\"Version\":\""`cat /sys/class/dmi/id/bios_version`"\","
echo -e "\"Serial Number\":\""`cat /sys/class/dmi/id/product_serial`"\","
echo -e "\"PC Name\":\""`hostname`"\","
echo -e "\"Operating System\":\""`hostnamectl | grep "Operating System" | cut -d ' ' -f5-`"\","
echo -e "\"Architecture\":\""`arch`"\","
echo -e "\"Processor Name\":\""`awk -F':' '/^model name/ {print $2}' /proc/cpuinfo | uniq | sed -e 's/^[ \t]*//'`"\","
echo -e "\"Memory\":\"" `dmidecode -t 17 | grep "Size.*MB" | awk '{s+=$2} END {print s / 1024 "GB"}'`"\","
echo -e "\"HDD Model\":\""`cat /sys/block/sda/device/model`"\","
echo -e "\"System Main IP\":\""`hostname -I`"\"})"要重定向这个输出,您可以使用几种方法。首先,您可以在调用脚本时使用重定向,如
script.sh > result.json. 第二,(如果您希望始终使用相同的文件名)--您可以在脚本的开头添加以下行:
exec > filename.json第三种方法是用大括号包围您想要的输出,并重定向这个部分:
#!/bin/bash
readarray -t array <<< "$(df -h)"
var=$(echo "${array[1]}"| grep -aob '%' | grep -oE '[0-9]+')
echo "${array[3]:$var-3:4}"
{echo -e "({\"Manufacturer\":\""`cat /sys/class/dmi/id/chassis_vendor`"\","
echo -e "\"Product Name\":\""`cat /sys/class/dmi/id/product_name`"\","
echo -e "\"Version\":\""`cat /sys/class/dmi/id/bios_version`"\","
echo -e "\"Serial Number\":\""`cat /sys/class/dmi/id/product_serial`"\","
echo -e "\"PC Name\":\""`hostname`"\","
echo -e "\"Operating System\":\""`hostnamectl | grep "Operating System" | cut -d ' ' -f5-`"\","
echo -e "\"Architecture\":\""`arch`"\","
echo -e "\"Processor Name\":\""`awk -F':' '/^model name/ {print $2}' /proc/cpuinfo | uniq | sed -e 's/^[ \t]*//'`"\","
echo -e "\"Memory\":\"" `dmidecode -t 17 | grep "Size.*MB" | awk '{s+=$2} END {print s / 1024 "GB"}'`"\","
echo -e "\"HDD Model\":\""`cat /sys/block/sda/device/model`"\","
echo -e "\"System Main IP\":\""`hostname -I`"\"})"} > filename.json我想提出的最后一种方法是在执行后修改脚本的输出。下面的命令将完全满足您的需要(但是第一行将以相同的方式处理,并且将向其中添加一个空字符串,为了避免它,您可以尝试第三种输出重定向方法):
echo $(sed '$ s/,/)}/' <<< $(awk -F ":" 'BEGIN {OFS=""; print "({";} { print "\"",$1,"\":\"",$2,"\",";} ' filename.json) | tr '\n' ' ') > filename.json这里的-F用于向每个字段添加引号(-F标志的意思是‘字段分隔符’),OFS设置为空字符串以避免额外的空格。然后sed删除最后的逗号(我知道使用awk也是可能的,但这个方法看起来要简单得多,IMO)。tr用于用空格替换所有换行符。输出被重定向到同一个文件。开始的回显向输出的末尾添加换行符。
https://askubuntu.com/questions/1325698
复制相似问题