233 lines
5.7 KiB
Bash
233 lines
5.7 KiB
Bash
#!/bin/bash
|
||
|
||
set -e
|
||
|
||
# Define some colours
|
||
BOLD="[1m"
|
||
FBLK="[30m"
|
||
FRED="[31m"
|
||
FGRN="[32m"
|
||
FYLW="[33m"
|
||
FBLU="[34m"
|
||
FPPL="[35m"
|
||
FCYN="[36m"
|
||
FWHT="[37m"
|
||
F_ORANGE="[38;5;178m"
|
||
F_ORANGE2="[38;5;172m"
|
||
F_PURPLE="[38;5;090m"
|
||
F_TEAL="[38;5;024m"
|
||
F_SEA="[38;5;026m"
|
||
F_YELLOW="[38;5;178m"
|
||
F_GREEN="[38;5;041m"
|
||
F_GREEN2="[38;5;034m"
|
||
F_RED="[38;5;196m"
|
||
F_CYAN="[38;5;038m"
|
||
F_DARKBLUE="[38;5;018m"
|
||
F_DARKPURPLE="[38;5;053m"
|
||
F_PURPLE="[38;5;129m"
|
||
F_DARKGREY="[38;5;233m"
|
||
F_MIDGREY="[38;5;236m"
|
||
F_MIDGREY2="[38;5;243m"
|
||
F_BLUE="[38;5;019m"
|
||
F_LIGHTBLUE="[38;5;039m"
|
||
F_GOLD="[38;5;220m"
|
||
F_LIGHTCYAN="[38;5;195m"
|
||
F_LIGHTYELLOW="[38;5;230m"
|
||
B_DARKBLUE="[48;5;017m"
|
||
F_BRIGHTYELLOW="[38;5;226m"
|
||
F_DARKGREY="[38;5;241m"
|
||
F_BRIGHTGREEN="[38;5;118m"
|
||
F_BRIGHTORANGE="[38;5;214m"
|
||
F_MIDGREEN="[38;5;112m"
|
||
F_PINK="[38;5;198m"
|
||
F_BRIGHTPINK="[38;5;219m"
|
||
F_VIOLET="[38;5;177m"
|
||
F_DARKRED="[38;5;161m"
|
||
F_STEEL="[38;5;81m"
|
||
CLR="[0m"
|
||
BRED="[41m"
|
||
BGRN="[42m"
|
||
|
||
#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="[38;5;113m"
|
||
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 <<EOF
|
||
|
||
[38;5;235m--[38;5;033mSystem[38;5;235m----------------------------------------------------------------------[0m
|
||
$(sections | column -t -s "|")
|
||
|
||
EOF
|