2015-01-20 3 views
1

Ну, я пытаюсь создать простой скрипт, который будет читать команду unix, и напечатать это вывод wikitable (class). Поэтому я могу скопировать и вставить вывод в wikipage. Это интересно для получения информации об оборудовании и отслеживания нашего оборудования. Но проблема, с которой я сталкиваюсь, заключается в том, что некоторые аппаратные средства имеют более одного IP-адреса. Я хочу напечатать каждый ipaddress в новой видимой строке. Но так война не повезло. Может ли кто-то помочь.BASH Wikitables получает информацию об оборудовании

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

Вероятно, самый простой способ:

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-адресов, вы можете просто пробираться сквозь них в оболочке.

Я взял на себя смелость заставлять локаль для ifconfig до C, так что вы не столкнетесь с проблемами в системах с неанглийским языком. Без него, например, у меня есть inet Adresse:127.0.0.1 вместо inet addr:127.0.0.1, что смутило бы более позднюю команду grep.

Если это строго для Linux, кстати, вы можете использовать $(hostname -I) вместо целого ifconfig shebang, чтобы аккуратно обойти проблему локали.

+0

Хороший ... Он работает как шарм. Спасибо за информацию: D – darkM

Смежные вопросы