Problem understanding Paths


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Problem understanding Paths
# 1  
Old 05-26-2012
Problem understanding Paths

If I don't explain my issue well enough, I apologize ahead of time, extreme newbie here to scripting.

I'm currently learning scripting from books and have moved on to the text Wicked Cool Shell Scripts by Dave Taylor, but there are still basic concepts that I'm having trouble understanding.

The code I was working with is meant to verify whether a particular program is valid or can be found in the path directory list. It's the latter process that I don't understand will explain further. The code I was working with is as follows (p. 11 of Wicked Cool Shell Scripts)

Code:
 
#!/bin/sh

in_path()
{
cmd=$1   path=$2   retval=1
oldIFS=$IFS   IFS-":"

for directory in $path
do
   if [ -x $direcotry/$cmd ] ; then
   retval =0
   fi
done
IFS=$oldIFS
return $retval
}

checkForCmdInPath()
{
   var=$1
   if [ "$var" != ""] ; then
      if  [ "${var%${var#?}}" = "/" ] ; then
         if [ ! -x $var ] ; then
            return 1
         fi
      elif ! in_path $var $PATH ; then
            return 2
       fi
    fi
}
    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


Now when I enter 'inpath echo' at the command line (as per the instructions) I get this error message

-bash: inpath: command not found

I'm pretty certain I entered the code correctly, so I'm assuming the problem has to do with my not understanding the concept of paths, and so far no text has explained it in a way that I've understood so far.

Could someone please help me understand this because I'm currently stuck.
# 2  
Old 05-26-2012
Found a couple:
Code:
IFS-":"                     # => should be IFS=":"
if [ -x $direcotry/$cmd ]   # => if [ -x $directory/$cmd ]
retval =0                   # => should be retval=0
if [ "$var" != ""] ; then   # => if [ "$var" != "" ] ; then

# 3  
Old 05-26-2012
Entered wrong in post

My bad,

Those errors were entered wrong in the post, but are correct in the actual code.
# 4  
Old 05-26-2012
OK, did you chmod +x the script and did you name it "inpath" and did you execute it as ./inpath echo?


--
Remarkable BTW, so you did not copy-paste the script from your Unix environment, but typed it in a second time?
# 5  
Old 05-26-2012
I did both those things and, to be honest, I'm not sure how to copy and paste the code. Like I said, major newbie (not about copy and paste, but doing so when using the terminal window of Mac OSX 10.7).

I tried accessing the file outside of the terminal, but it's listed as an executable and I'm not sure what would happen if I opened it that way.
# 6  
Old 05-26-2012
In terminal of OSX list the script (cat in path), select the output with your mouse and use "⌘-c" and then "⌘-v" in your browser...

So is it working now?
# 7  
Old 05-26-2012
I forgot to mention that I get this error message after entering ./inpath echo at the command line:

./inpath: line 48: checkforCmdInPath: command not found

---------- Post updated at 02:38 PM ---------- Previous update was at 02:37 PM ----------

Sorry, I meant that I had already done those two things before even writing this post.

---------- Post updated at 02:40 PM ---------- Previous update was at 02:38 PM ----------

Here's my actual code (I'm embarrassed I didn't think to just cut and paste like normal):

Code:
#!/bin/sh
# inpath - Verifies that a specified 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.  Returns
	# 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 math for 'expr' in the variable value (if any), and 
	# ${var%espr} returns everything that doesn't match (in this
	# case, just the very first character.  You can also do this 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
}
	if [ $# -ne 1 ] ; then
		echo "Usage: $0 comand" >&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

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Problem with (Understanding) function

I have this code #!/bin/bash LZ () { RETVAL="\n$(date +%Y-%m-%d_%H-%M-%S) --- " return RETVAL } echo -e $LZ"Test" sleep 3 echo -e $LZ"Test" which I want to use to make logentrys on my NAS. I expect of this code that there would be output like 2017-03-07_11-00-00 --- Test (4 Replies)
Discussion started by: matrois
4 Replies

2. Shell Programming and Scripting

Problem in understanding debugging

Hi i was going through the script debugging technique. below example was given in the book. 1 #!/bin/sh 2 3 Failed() { 4 if ; then 5 echo "Failed. Exiting." ; exit 1 ; 6 fi 7 echo "Done." 8 } 9 10 echo "Deleting old backups,... (11 Replies)
Discussion started by: scriptor
11 Replies

3. Shell Programming and Scripting

Problem on understanding the regexp command

Hi all, I'm not clear of this regexp command: regexp {(\S+)\/+$} $String match GetString From my observation and testing, if $String is abc/def/gh $GetString will be abc/def I don't understand how the /gh in $String got eliminated. Please help. Thanks (2 Replies)
Discussion started by: mar85
2 Replies

4. Shell Programming and Scripting

Problem in understanding export uses

i am beginner in shell scripting. not able to understand what below line will do. PS1=${HOST:=´uname -n´}"$ " ; export PS1 HOST below is the script #!/bin/hash PS1=${HOST:=´uname -n´}"$ " ; export PS1 HOST ; echo $PS1 and i getting the below output ´uname -n´$ (25 Replies)
Discussion started by: scriptor
25 Replies

5. Shell Programming and Scripting

Problem with the shell script for understanding

Can Anybody please tell me the meaning of the script: #!/bin/sh str=$@ echo $str | sed 's/.*\\//' exit 0 (6 Replies)
Discussion started by: nixhead
6 Replies

6. Shell Programming and Scripting

problem in understanding the output of errpt -d H -T PERM -s `date +"%m%d%H00%y"`

Its very critical and 'm in need to schedule this on my crontab so that the output can be monitored by a tool I have written the command below to redirect the error which has the output redirected to the file gincle_lol.log. echo "---" >>/gingle/gincle_lol.log date... (1 Reply)
Discussion started by: Sounddappan
1 Replies

7. AIX

Problem in understanding the output of errpt -d H -T PERM -s `date +"%m%d%H00%y"`

Its very critical and 'm in need to schedule this on my crontab so that the output can be monitored by a tool I have written the command below to redirect the error which has the output redirected to the file gincle_lol.log. Code: echo "---" >>/gingle/gincle_lol.log date... (0 Replies)
Discussion started by: Sounddappan
0 Replies

8. Shell Programming and Scripting

egrep understanding problem

Hi, Can anyone please let me know the meaning of this line,i am not able to understand the egrep part(egrep '^{1,2}).This will search for this combination in beginning but what does the values in {}signifies here. /bin/echo $WhenToRun | egrep '^{1,2}:$' >/dev/null (1 Reply)
Discussion started by: namishtiwari
1 Replies

9. Filesystems, Disks and Memory

having problem in understanding namei module

can anyone give me some idea on unix filesystem namei's algorithsm (2 Replies)
Discussion started by: kangc
2 Replies

10. UNIX for Dummies Questions & Answers

paths

Hi there! People, i'm a new unix user, and i'm having some problems... I'm updating some scripts (korn shell) in different servers. I use telnet to access these servers and emacs to write the scripts. One of them is an HP, and there´s no problem. But the other one is an AIX, and when i call... (1 Reply)
Discussion started by: caiohn
1 Replies
Login or Register to Ask a Question