BASH Wikitables获取硬件信息

时间:2015-01-20 12:19:29

标签: linux bash mediawiki

好吧,我正在尝试创建一个简单的脚本来读取unix命令并打印这是一个wikitable(类)输出。所以我可以将输出复制并粘贴到wikipage。这对于获取硬件信息和跟踪我们的硬件很有趣。 但我遇到的问题是某些硬件有多个IP地址。我想在一个新的wikitable线上打印每个ipaddress。 但所以战争没有运气。可能有人帮忙。

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 '|}'     

1 个答案:

答案 0 :(得分: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 '|-'   

# 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 | foo | bar命令的输出是以空格分隔的列表 - 空白是换行符并不重要 - 对于IP地址,您可以简单地在shell循环中浏览它们。 / p>

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

顺便提一下,如果这是针对Linux的,那么您可能希望使用$(hostname -I)而不是整个ifconfig shebang来巧妙地回避区域设置问题。

相关问题