#!/bash/sh #inpath - Vefifies that a specific program is either valid as is, # or that it can be found in the PATH directory list. in_path() { #Given a command and the PATH, try to find the command. Return #0 if found and executable, 1 if not. Note that this temporarily modifies #the IFS (input field separator) but restores it upon completion. cmd=$1 path=$2 retval=1 oldIFS=$IFS IFS=":" for directory in $path do if [-x $directory/$cmd]; then retval=0 #if we're here, we found $cmd in $directory fi done IFS=$oldIFS return $retval } checkForCmdInPath() { var=$1 #The variable slicing notation in the following conditional #needs some explanation: ${var#expr} returns everything after #the match for 'expr' in the variable value (if any), and #${var%expr} returns everything that doesn't match (in this #case, just the very first character. You can also do thid #in Bash with ${var:0:1} and you could use cut too: cut -c1. if["$var"!=""];then if["${var%${var#?}}" = "/"]; then if[!-x $var]; then return 1 fi elif ! in_path $var $PATH ; then return 2 fi fi } #To run the script, a short block of command need to be #inserted to the very end of the file. These commands #pass starting parameter to the validation program and check #the return cod if[ $#-ne 1 ]; then echo "Usage: $0 command" >&2 ; exit 1 fi checkForCmdInPath "$1" case $? in 0) echo "$1 found in PATH" ;; 1) echo "$1 not found or not executable" ;; 2) echo "$1 not found in PATH" ;; esac exit 0