#!/bin/bash set -e # Define some colours BOLD="" FBLK="" FRED="" FGRN="" FYLW="" FBLU="" FPPL="" FCYN="" FWHT="" F_ORANGE="" F_ORANGE2="" F_PURPLE="" F_TEAL="" F_SEA="" F_YELLOW="" F_GREEN="" F_GREEN2="" F_RED="" F_CYAN="" F_DARKBLUE="" F_DARKPURPLE="" F_PURPLE="" F_DARKGREY="" F_MIDGREY="" F_MIDGREY2="" F_BLUE="" F_LIGHTBLUE="" F_GOLD="" F_LIGHTCYAN="" F_LIGHTYELLOW="" B_DARKBLUE="" F_BRIGHTYELLOW="" F_DARKGREY="" F_BRIGHTGREEN="" F_BRIGHTORANGE="" F_MIDGREEN="" F_PINK="" F_BRIGHTPINK="" F_VIOLET="" F_DARKRED="" F_STEEL="" CLR="" BRED="" BGRN="" #ARROW="►" ARROW=">" PRIMARY_COLOUR="${F_BRIGHTYELLOW}" COLON="${F_DARKGREY}:${CLR}" NA="${F_DARKGREY}N/A${CLR}" section() { TITLE="$1" TEXT="$2" #ARROW_COLOUR="${F_LIGHTYELLOW}" ARROW_COLOUR="" TITLE_COLOUR="${F_LIGHTCYAN}" echo " ${ARROW_COLOUR}${ARROW}${CLR} ${TITLE_COLOUR}${TITLE}${CLR}|${TEXT}" } subsection() { TEXT="$1" echo " ${F_DARKGREY}>${CLR}|${TEXT}" } format() { COLOUR="$1" TEXT="$2" echo "${COLOUR}${TEXT}${CLR}" } in_brackets() { TEXT="$1" echo "${F_DARKGREY}(${CLR}${TEXT}${F_DARKGREY})${CLR}" } prefix() { COLOUR="$1" PREFIX="$2" TEXT="$3" echo "${COLOUR}${PREFIX}${COLON} ${TEXT}" } show_hostname() { HOSTNAME="$(format ${F_BRIGHTYELLOW} $(hostname -f))" section "Host" "${HOSTNAME}" } show_os() { OS_DESCRIPTION=$(lsb_release -s -d) COLOUR_1=${F_BRIGHTORANGE} COLOUR_2=${F_ORANGE2} COLOUR_3=${F_ORANGE} DESCRIPTION=$(format ${COLOUR_1} "${OS_DESCRIPTION}") RELEASE=$(format ${COLOUR_2} "$(lsb_release -s -r)") CODENAME=$(format ${COLOUR_2} "$(lsb_release -s -c)") KERNEL=$(format ${COLOUR_2} "$(uname -r)") ARCH=$(format ${COLOUR_2} "$(uname -m)") OS_RELEASE=$(prefix ${COLOUR_3} Release "${RELEASE}") OS_CODENAME=$(in_brackets ${CODENAME}) OS_KERNEL=$(prefix ${COLOUR_3} "Kernel " "${KERNEL}") OS_ARCH=$(in_brackets ${ARCH}) section "OS" "${DESCRIPTION}" subsection "${OS_RELEASE} ${OS_CODENAME}" subsection "${OS_KERNEL} ${OS_ARCH}" } show_net() { INET_DEFAULT=$(ip ro show default | grep -Po "dev \w+" | head -n1 | awk '{ print $2 }') INET6_DEFAULT=$(ip -6 ro show default | grep -Po "dev \w+" | head -n1 | awk '{ print $2 }') MAC_ADDR=$(ip addr show dev ${INET_DEFAULT} | grep "link/ether" | awk '{ print $2 }') INET_ADDR=$(ip addr show dev ${INET_DEFAULT} | grep "inet " | grep "scope global" | awk '{ print $2 }' | head -n1) INET6_ADDR=$(ip addr show dev ${INET6_DEFAULT} | grep "inet6 " | grep "scope global" | awk '{ print $2 }' | head -n1) if [[ -z ${INET6_ADDR} ]]; then INET6_ADDR=${NA} fi PRIMARY_IFACE="$(format ${F_LIGHTBLUE} ${INET_DEFAULT})" PRIMARY_IP4="$(format ${F_LIGHTBLUE} ${INET_ADDR})" PRIMARY_IP6="$(format ${F_LIGHTBLUE} ${INET6_ADDR})" PRIMARY_MAC="$(format ${F_LIGHTBLUE} ${MAC_ADDR})" PRIMARY="$(prefix ${F_STEEL} NIC ${PRIMARY_IFACE})" MAC="$(in_brackets ${PRIMARY_MAC})" section "Net" "${PRIMARY} ${MAC}" subsection "$(prefix ${F_STEEL} IP4 ${PRIMARY_IP4})" subsection "$(prefix ${F_STEEL} IP6 ${PRIMARY_IP6})" } show_hardware() { if [[ "$(lsb_release -i)" =~ "Raspbian" ]]; then SYSINFO="$(pinout | egrep -o '(Pi Model [0-9][A-Z]\+?\s? V[0-9]\.[0-9])')" SYSTEM=$(format ${F_VIOLET} "${SYSINFO}") else MANUFACTURER=$(dmidecode -s system-manufacturer) PRODUCT_NAME=$(dmidecode -s system-product-name) SYSINFO=$(format ${F_VIOLET} "${MANUFACTURER}") if [[ -z ${MANUFACTURER} ]]; then SYSTEM=${NA} else if [[ ! -z ${PRODUCT_NAME} ]]; then PRODUCT=$(format ${F_VIOLET} "${PRODUCT_NAME}") PRODUCT_DISPLAY=$(in_brackets "${PRODUCT}") SYSINFO="${SYSINFO} ${PRODUCT_DISPLAY}" fi SYSTEM=$(format ${F_VIOLET} "${SYSINFO}") fi fi MEM_B=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }') let MEM_MB="${MEM_B}/1024" MEMORY=$(format ${F_VIOLET} "${MEM_MB}M") PROCESSOR=$(format ${F_VIOLET} "$(cat /proc/cpuinfo | grep 'model name' | head -n1 | awk -F': ' '{ print $2 }')") CPUS=$(in_brackets $(format ${F_VIOLET} x$(cat /proc/cpuinfo | grep processor | wc -l))) DISKS=$(lsblk | grep disk | awk '{ print $1"|"$4 }') STORAGE="" for DISK in ${DISKS}; do DEVICE=$(format ${F_VIOLET} $(echo ${DISK} | cut -f1 -d"|")) SIZE=$(in_brackets $(format ${F_VIOLET} $(echo ${DISK} | cut -f2 -d"|"))) STORAGE="${STORAGE}${DEVICE} ${SIZE} " done if [[ -z ${STORAGE} ]]; then STORAGE=${NA} fi SYS=$(prefix ${F_BRIGHTPINK} Sys "${SYSTEM}") CPU=$(prefix ${F_BRIGHTPINK} CPU "${PROCESSOR} ${CPUS}") MEM=$(prefix ${F_BRIGHTPINK} Mem "${MEMORY}") DSK=$(prefix ${F_BRIGHTPINK} Disk "${STORAGE}") section "H/w" "${SYS}" subsection "${CPU}" subsection "${MEM} ${DSK}" } show_uptime() { COLOUR_1=${F_BRIGHTGREEN} COLOUR_2=${F_GREEN2} COLOUR_3=${F_GREEN} AGO=$(format ${COLOUR_1} "$(uptime -p | cut -c4-)") BOOT=$(format ${COLOUR_2} "$(uptime -s)") BUILT=$(format ${COLOUR_2} "$(stat / | grep "Birth" | sed 's/Birth: //g' | cut -b 2-20)") BOOT_DATE=$(prefix ${COLOUR_3} Booted "${BOOT}") BUILT_DATE=$(prefix ${COLOUR_3} "Built " "${BUILT}") section "Up" "${AGO}" subsection "${BOOT_DATE}" subsection "${BUILT_DATE}" } sections() { show_hostname show_os show_uptime show_net show_hardware } cat <