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.
IFS-":" # => should be IFS=":"
if [ -x $direcotry/$cmd ] # => if [ -x $directory/$cmd ]
retval =0 # => should be retval=0
if [ "$var" != ""] ; then # => if [ "$var" != "" ] ; then
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.
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
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)
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)
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)
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)
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)
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)
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)
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)