#! /bin/sh # ############################################################################# NAME_="progsv" HTML_="show program version" PURPOSE_="list version numbers of important programs installed" SYNOPSIS_="$NAME_ [-hl]" REQUIRES_="standard GNU commands" VERSION_="1.2" DATE_="1999-10-19; last update: 2005-03-23" AUTHOR_="Dawid Michalczyk " URL_="www.comp.eonworks.com" CATEGORY_="admin" PLATFORM_="Linux" SHELL_="bash" DISTRIBUTE_="yes" # ############################################################################# # This program is distributed under the terms of the GNU General Public License # Everybody has a different way of showing their program number version... Thus # the most reliable way of getting the version number ended up being quite # inefficient due to frequent tmp file use. # 2do: sendmail -bt -d0 usage () { echo >&2 "$NAME_ $VERSION_ - $PURPOSE_ Usage: $SYNOPSIS_ Requires: $REQUIRES_ Options: -h, usage and options (this help) -l, see this script" exit 1 } case $1 in -h) usage ;; -l) more $0; exit 1 ;; esac # tmp file set up tmp_1=/tmp/tmp.${RANDOM}$$ tmp_2=/tmp/tmp.${RANDOM}$$ # signal trapping and tmp file removal trap 'rm -f $tmp_1 $tmp_2 >/dev/null 2>&1' 0 trap "exit 1" 1 2 3 15 [[ $UID != 0 ]] && echo run $NAME_ as root, otherwise some \ installed programs may be listed as not installed # programs that only accept "--version" option; usually GNU progs_a[0]=awk progs_a[1]=bash progs_a[2]=find progs_a[3]=tar progs_a[4]=gcc progs_a[5]=gpg progs_a[6]=grep progs_a[7]=mc progs_a[8]=mysql progs_a[9]=php progs_a[10]=sed progs_a[11]=exim # programs that only accept "-V" option progs_b[0]=ssh progs_b[1]=httpd progs_b[2]=python progs_b[3]=iptables # =========================================================================== # LOCAL FUNCTIONS # =========================================================================== prog_exist() { # purpose: check if a file exist; return status value # usage: which $1 &>/dev/null return $? } prog_version() { # purpose: get the program version string # usage: prog=$1 version=$2 name=$(echo $prog | tr [a-z] [A-Z]) prog_exist $prog if [[ $? != 0 ]];then printf "%-10s%-s\n" "${name}:" " $prog not installed" >> $tmp_1 else $prog $version &> $tmp_2 vstring=$(head -n 1 $tmp_2) printf "%-10s%-s\n" "${name}: " "$vstring" >> $tmp_1 fi } # =========================================================================== # MAIN # =========================================================================== echo "[ SYSTEM ]" $(uname -a) # programs that accept "--version" for a in ${progs_a[@]};do prog_version $a --version done # programs that accept "-V" for a in ${progs_b[@]};do prog_version $a -V done # programs that accept other version notations or the version number is # not on the first line (perl) # ------------------------------------------- # # JAVA # ------------------------------------------- # prog=java version=-version name=$(echo $prog | tr [a-z] [A-Z]) prog_exist $prog if [[ $? != 0 ]];then printf "%-10s%-s\n" "${name}:" " $prog not installed" >> $tmp_1 else $prog $version &> $tmp_2 vstring=$(head -n 1 $tmp_2) printf "%-10s%-s\n" "${name}:" "$vstring" >> $tmp_1 fi # ------------------------------------------- # # NAMED # ------------------------------------------- # prog=named version=-v name=$(echo $prog | tr [a-z] [A-Z]) prog_exist $prog if [[ $? != 0 ]];then printf "%-10s%-s\n" "${name}:" " $prog not installed" >> $tmp_1 else $prog $version &> $tmp_2 vstring=$(head -n 1 $tmp_2) printf "%-10s%-s\n" "${name}:" "$vstring" >> $tmp_1 fi # ------------------------------------------- # # PERL # ------------------------------------------- # prog=perl version=-version name=$(echo $prog | tr [a-z] [A-Z]) prog_exist $prog if [[ $? != 0 ]];then printf "%-10s%-s\n" "${name}:" " $prog not installed" >> $tmp_1 else $prog $version &> $tmp_2 vstring=$(sed -n '2p' $tmp_2) printf "%-10s%-s\n" "${name}:" "$vstring" >> $tmp_1 fi # ------------------------------------------- # # XFREE86 # ------------------------------------------- # prog=XFree86 version=-version name=$(echo $prog | tr [a-z] [A-Z]) prog_exist $prog if [[ $? != 0 ]];then printf "%-10s%-s\n" "${name}:" " $prog not installed" >> $tmp_1 else $prog $version &> $tmp_2 vstring=$(sed -n '2p' $tmp_2) printf "%-10s%-s\n" "${name}:" "$vstring" >> $tmp_1 fi # ------------------------------------------- # # LIBC # ------------------------------------------- # prog=/lib/libc.so.6 name=LIBC prog_exist $prog if [[ $? != 0 ]];then printf "%-10s%-s\n" "${name}:" " $prog not installed" >> $tmp_1 else $prog &> $tmp_2 vstring=$(sed -n '1p' $tmp_2) printf "%-10s%-s\n" "${name}:" "$vstring" >> $tmp_1 fi sort $tmp_1