#!/bin/sh # set some defaults dbuser_varname="dbuser" dbpass_varname="dbpass" dbname_varname="dbname" dbserver_varname="dbserver" dbport_varname="dbport" dbtype_varname="dbtype" # the version will always be < the package version VERSION="1.7.1" version(){ prog=`basename $0` cat << EOF $prog v$VERSION copyright (c) 2005 sean finney EOF } usage(){ version cat << EOF usage: $prog [-hv] [-a] [-d [varname]] [-u [varname]] [-p [varname]] [-s [varname]] [-P [varname]] [-t [varname]] -f format infile infile use the given dbconfig-common config file as input -f|--format use the given output format (default: sh) -a|--all include all information in output (default) -d|--dbname include the dbname in the output -p|--dbpass include the dbpass in the output -s|--dbserver include the dbserver in the output -P|--dbport include the dbport in the output -u|--dbuser include the dbuser in the output -t|--dbtype include the dbtype in the output -h|--help display this helpful message -v|--version output the version and exit format is one of a list of include-file style formats for various programming languages. the current list includes: sh - /bin/sh style include file perl - perl parseable include file php - php parseable include file exec - run the file as a script and interpret its output. EOF } TEMP=`getopt -o af:hd::p::u::s::t::P::v --long help,dbuser::,dbpass::,dbport::,dbserver::,dbtype::,format:,version -n $0 -- "$@"` if [ $? != 0 ] ; then usage >&2 ; exit 1 ; fi eval set -- "$TEMP" while true; do case "$1" in -a|--all) use_all="yes" shift ;; -d|--dbname) use_dbname="yes" if [ ! -z "$2" ]; then dbname_varname="$2" fi shift 2 ;; -u|--dbuser) use_dbuser="yes" if [ ! -z "$2" ]; then dbuser_varname="$2" fi shift 2 ;; -p|--dbpass) use_dbpass="yes" if [ ! -z "$2" ]; then dbpass_varname="$2" fi shift 2 ;; -s|--dbserver) use_dbserver="yes" if [ ! -z "$2" ]; then dbserver_varname="$2" fi shift 2 ;; -P|--dbport) use_dbport="yes" if [ ! -z "$2" ]; then dbport_varname="$2" fi shift 2 ;; -t|--dbtype) use_dbtype="yes" if [ ! -z "$2" ]; then dbtype_varname="$2" fi shift 2 ;; -f|--format) format="$2" shift 2 ;; -h|--help) usage exit ;; -v|--version) version exit ;; --) shift break ;; *) echo "eh? $1" > /dev/stderr exit 1 ;; esac done # if they asked for all vars, or didn't ask for anything (which defaults to all) if [ "$use_all" ] || [ ! "${use_dbuser}${use_dbpass}${use_dbname}${use_dbserver}${use_dbtype}${use_dbport}" ]; then use_dbuser="yes" use_dbpass="yes" use_dbname="yes" use_dbserver="yes" use_dbport="yes" use_dbtype="yes" fi inputfile=$1 if [ ! "$inputfile" ]; then echo "error: you must specify an inputfile" >&2 usage >&2 exit 1 fi if [ ! -f "$inputfile" -o ! -r "$inputfile" ]; then echo "unable to read input file $inputfile" >&2 exit 1 fi if [ ! "$format" ]; then echo "error: you must specify a format!" >&2 usage >&2 exit 1 fi case $format in sh) . $inputfile [ "$use_dbuser" ] && cat << EOF $dbuser_varname='$dbc_dbuser' EOF [ "$use_dbpass" ] && cat << EOF $dbpass_varname='$dbc_dbpass' EOF [ "$use_dbname" ] && echo "$dbname_varname='$dbc_dbname'" [ "$use_dbserver" ] && echo "$dbserver_varname='$dbc_dbserver'" [ "$use_dbport" ] && echo "$dbport_varname='$dbc_dbport'" [ "$use_dbtype" ] && echo "$dbtype_varname='$dbc_dbtype'" ;; php) if ! which php > /dev/null; then echo "error: php format but i can't find a php binary!" >&2 exit 1 fi cat << EOF | php EOF ;; perl) ( cat $inputfile; cat << EOF ) | perl print "dbc_dbuser='\$$dbuser_varname'\n" if("$use_dbuser"); print "dbc_dbpass='\$$dbpass_varname'\n" if("$use_dbpass"); print "dbc_dbname='\$$dbname_varname'\n" if("$use_dbname"); print "dbc_dbserver='\$$dbserver_varname'\n" if("$use_dbserver"); print "dbc_dbport='\$$dbport_varname'\n" if("$use_dbport"); print "dbc_dbtype='\$$dbtype_varname'\n" if("$use_dbtype"); EOF ;; exec) sh -c $inputfile ;; esac exit 0