#!/bin/sh
#-------------------------------------------------------------------------------
# getconf.sh                                     (C) 2006 T.Birnthaler OSTC GmbH
# Systemkonfigurations-Variablen anzeigen
#-------------------------------------------------------------------------------
      DBG=
   FILLED=1
    EMPTY=
UNDEFINED=
  UNKNOWN=
      FMT="%-35s %s\n"          # Alternative: "%35s %s\n" (rechtbündig)
   REFDIR="/"                   # Alternative: "." 

# Bekannte Optionen erkennen, falsche abfangen
while getopts ":adefgk" OPT; do # ":" am Anfang unterdrückt Fehlermeldung
	case $OPT in                # ":" nach Buchstabe heißt mit Parameter
		a) FILLED=1; EMPTY=1; UNDEFINED=1; UNKNOWN=1 ;;
		d) UNDEFINED=1 ;;
		e)     EMPTY=1 ;;
		f)    FILLED=  ;;
		g)       DBG=1 ;;
		k)   UNKNOWN=1 ;;
		*) echo "error: Option -$OPTARG" nicht erlaubt 1>&2
		   echo "usage: $0 [-a -f -e -d -k]"
		   exit ;;
	esac
done

[ "$DBG" ] && strings $(type -p getconf) | LANG=C grep "^[_A-Z][_A-Z]*$" | sort

# getconf enthält eine vollständige Liste der System-Var. (holen wir einfach ;-)
for VAR in $(strings $(type -p getconf) | LANG=C grep "^[_A-Z][_A-Z]*$" | sort )
do
	# Normale System-Variable
	if getconf "$VAR" > /dev/null 2> /dev/null
	then
		if getconf "$VAR" | grep "nicht definiert" > /dev/null
		then
			[ "$UNDEFINED" ] && printf "$FMT" "$VAR" "<undefined>"
		elif [ -n "$(getconf "$VAR" 2> /dev/null)" ]
		then
			[ "$FILLED" ] && printf "$FMT" "$VAR" "$(getconf "$VAR" 2> /dev/null)"
		else
			[ "$EMPTY" ] && printf "$FMT" "$VAR" "<empty>"
		fi
	# Evtl. auf das Dateisystem bezogene Variable? -> Auf Wurzelverzeichnis beziehen
	elif getconf "$VAR" $REFDIR > /dev/null 2> /dev/null
	then
		if getconf "$VAR" $REFDIR 2> /dev/null | grep "nicht definiert" > /dev/null
		then
			[ "$UNDEFINED" ] && printf "$FMT" "$VAR" "<undefined>"
		elif [ -n "$(getconf "$VAR" $REFDIR 2> /dev/null)" ]
		then
			[ "$FILLED" ] && printf "$FMT" "$VAR" "$(getconf "$VAR" $REFDIR 2> /dev/null)"
		else
			[ "$EMPTY" ] && printf "$FMT" "$VAR" "<empty>"
		fi
	else
		[ "$UNKNOWN" ] && printf "$FMT" "$VAR" "<unknown>"
	fi
done

