BASH Wikitables 有硬件信息
BASH Wikitables get hardware info
好吧,我正在尝试制作一个简单的脚本来读取 unix 命令并打印这是一个 wikitable(class) 输出。所以我可以将输出复制并粘贴到维基页面。这对于获取困难ware 信息和跟踪我们的困难ware 很有趣。
但是我遇到的问题是有些hardware有多个ip地址。我想在新的 wikitable 行中打印每个 ipaddress。
但是 war 运气不好。有人可以帮忙吗?
ipaddr=$(ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print }')
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 }'); 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循环。
我擅自将 ifconfig
的区域设置强制为 C
,这样您就不会 运行 在非英语区域设置的系统上遇到麻烦。没有它,例如,我有 inet Adresse:127.0.0.1
而不是 inet addr:127.0.0.1
,这会混淆后面的 grep
命令。
如果这完全是为了 Linux,顺便说一下,您可能想使用 $(hostname -I)
而不是整个 ifconfig
shebang 来巧妙地回避语言环境问题。
好吧,我正在尝试制作一个简单的脚本来读取 unix 命令并打印这是一个 wikitable(class) 输出。所以我可以将输出复制并粘贴到维基页面。这对于获取困难ware 信息和跟踪我们的困难ware 很有趣。 但是我遇到的问题是有些hardware有多个ip地址。我想在新的 wikitable 行中打印每个 ipaddress。 但是 war 运气不好。有人可以帮忙吗?
ipaddr=$(ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{print }')
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 }'); 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循环。
我擅自将 ifconfig
的区域设置强制为 C
,这样您就不会 运行 在非英语区域设置的系统上遇到麻烦。没有它,例如,我有 inet Adresse:127.0.0.1
而不是 inet addr:127.0.0.1
,这会混淆后面的 grep
命令。
如果这完全是为了 Linux,顺便说一下,您可能想使用 $(hostname -I)
而不是整个 ifconfig
shebang 来巧妙地回避语言环境问题。