#!/bin/bash # df (= DiskFree) with some options and colored if Alert levels are exceeded # # (c) GPL by Ulf Bartolomäus VERSION="$( basename $0 ) Version 0.1.4 from 31.12.2023" # Input: -v : Version # -y YY : YY = alert level (yellow) in % (default = 80%) # -r RR : RR = critical alert level (red) in % (default = 90%) # Output: disk free information colored about mounted filesystems # Returnvalue: 0 # # Changes: # 0.1.4 # 'eval' added before the command execution # 0.1.3 # df -> added "2> /dev/null" to remove error messages # 0.1.2 # Some format improfements and adding from options # 0.1.1 # Initial based on whatch_new ## Definitions #MyDfC='df -hT' ## df command: -h: human readeable, -T: show filesystem type MyDfC='df -hTx tmpfs -x devtmpfs 2> /dev/null' ## df -hT command: excluding *tenpfs #MyDfC='df -hTx tmpfs -x devtmpfs -x fuse -x nfs4 2> /dev/null' ## df -hT command: excluding *tenpfs, fusa and nfs4 filesystems MyDfAlert1=80 ## "yellow" for alert level for out of space MyDfAlert2=90 ## "red" for critical alert for out of space ## Escape secences for color esc=$(echo -en "\033") ## define esc secence dick="${esc}[1m" ## define bold secence rot="${esc}[1;31m" ## define red secence gruen="${esc}[1;32m" ## define green secence gelb="${esc}[1;33m" ## define yelow secence blau="${esc}[1;34m" ## define blue secence lila="${esc}[1;35m" ## define purple secence norm=$(echo -en "${esc}[m\017") ## define default secence ## Shows the Version iformation do_version () { echo "* ${VERSION} *" } ## Show help do_usage () { echo "${dick}" echo "Usage: $( basename $0 ) [-Vvh] [-y AlertLevel] [-r CriticalAlertLevel] [dfOptions]" echo "This program provides the df (man df) information color by filling grade!" echo "${dick}${blau}" echo "This program is GPL (https://git.sp-codes.de/ub1x/my-scripts/src/branch/main/LICENSE)." echo "${norm}${dick}" echo "-V Version info - only" echo "-v Version info - aditional" echo "-h shows this help" echo "-y N percent value of alert level (marked in yellow) (default 80%)" echo "-r N percent value of critical alert level (marked in red) (default 90%)" # echo "dfOptions additional comand options" echo "${norm}" echo } ## Read options while getopts Vvhy:r: o; do case $o in V) do_version exit 0 ;; v) do_version ;; h) do_usage exit 0 ;; y) if [ -n "$(( ${OPTARG} ))" ] ; then MyDfAlert1=$(( ${OPTARG} )); # echo "gelb von 80% auf ${MyDfAlert1}% geändert" fi ;; r) if [ -n "$(( ${OPTARG} ))" ] ; then MyDfAlert2=$(( ${OPTARG} )); # echo "rot von 90% auf ${MyDfAlert2}% geändert" fi ;; *) do_usage exit 10 ;; esac done #shift $(expr $OPTIND - 1) #MyDfC="${MyDfC} $*" ## DiskFree (only if not the same device => unique check first 40 characters) eval ${MyDfC} | uniq -w40 | while read MyOutput; do ## Execute df and filter doublicates - for each row stored in MyOutput MyDfUsage=$(echo ${MyOutput} | awk '{ print $6}' | cut -d'%' -f1 ) ## Search Usage in % if [[ ! $( echo "${MyDfUsage}" | grep [[:digit:]] ) ]] ; then ## If first row echo -e ${dick}"${MyOutput}"${norm} ## Echo in bold elif [ $(( ${MyDfUsage} )) -ge ${MyDfAlert2} ]; then ## If critical level excided echo -e ${rot}"${MyOutput}"${norm} ## Echo in red elif [ $(( ${MyDfUsage} )) -ge ${MyDfAlert1} ]; then ## If alert level excided echo -e ${gelb}"${MyOutput}"${norm} ## Echo in yelow else ## default echo -e ${gruen}"${MyOutput}"${norm} ## Echo in green fi done