linux - BASH Wikitables 获取硬件信息

标签 linux bash mediawiki

好吧,我正在尝试制作一个简单的脚本来读取 unix 命令并打印这是一个 wikitable(class) 输出。所以我可以将输出复制并粘贴到维基页面。这对于获取硬件信息和跟踪我们的硬件很有趣。 但我遇到的问题是有些硬件有多个 ip 地址。我想在新的 wikitable 行中打印每个 ipaddress。 但是 war 没有运气。有人可以帮忙吗?

ipaddr=$(ifconfig  | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}')    

echo '{| class="wikitable"  
|+ Storage  
|-'  
printf -- '! %-19s !! %-14s !! %-20s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s\n' Hostname IP OS CPU Core RAM Name Type Size Used Mountpoint   
echo '|-'   
printf -- '| %-19s || %-14s\b || %-20s || %-14s || %-14s || %-14s || %-14s || %-14s || %-14s || %-14s || %-14s\n' "$HOSTNAME" "$ipaddr" "$os" "$cpu_model" "$cpu_cores" "$total_mem" "$disk_filesystem" "$disk_type" "$disk_size" "$disk_used" "$disk_mount"    
 echo '|}'     

最佳答案

可能是最简单的方法:

echo '{| class="wikitable"  
|+ Storage  
|-'  
printf -- '! %-19s !! %-14s !! %-20s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s !! %-14s\n' Hostname IP OS CPU Core RAM Name Type Size Used Mountpoint
echo '|-'   

# RELEVANT BIT HERE
for ipaddr in $(LC_ALL=C /sbin/ifconfig  | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}'); do
    printf -- '| %-19s || %-14s\b || %-20s || %-14s || %-14s || %-14s || %-14s || %-14s || %-14s || %-14s || %-14s\n' "$HOSTNAME" "$ipaddr" "$os" "$cpu_model" "$cpu_cores" "$total_mem" "$disk_filesystem" "$disk_type" "$disk_size" "$disk_used" "$disk_mount"    
done

echo '|}'

由于 ifconfig | 的输出富 | bar 命令是一个以空格分隔的列表——空格是换行符并不重要——IP 地址,您可以简单地在 shell 循环中遍历它们。

我冒昧地将 ifconfig 的语言环境强制设置为 C,这样您就不会在非英语语言环境的系统上遇到麻烦。没有它,例如,我有 inet Adresse:127.0.0.1 而不是 inet addr:127.0.0.1,这会混淆后面的 grep命令。

如果这完全是针对 Linux,顺便说一下,您可能想使用 $(hostname -I) 而不是整个 ifconfig shebang 来巧妙地避开语言环境问题。

关于linux - BASH Wikitables 获取硬件信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28045249/

相关文章:

c - 与交换空间相关的链接器性能?

regex - 如何使用正则表达式在 LInux 中查找具有不同结尾的多个文件?

linux - Ubuntu 中“which”命令不输出任何内容

export - 如何从 MediaWiki 的所有页面导出文本?

api - 维基百科 API - 抓取 'Background Inforamtion' 表?

linux - 如何将音频(使用 ffmpeg - libavcodec)解码为特定的 PCM 编解码器

c - Windows 和 Linux 上的内存页面写入检测

Bash 将双引号转换为单引号

bash - 如何取消引用 bash 中的符号链接(symbolic link)?

mysql - Mediawiki 的持续备份