Help with IF statements

I am writing a script that does a search for a argument in a file and lists all like occurrences. The script verifies that it is a file and then runs another script that list the lines. My problem is that I need the script to accept a file or a directory and then go to that directory check all files in that directory as well as verify they are files. My problem is that I can't figure out how to make my if statement verify that its a file or directory. If i put a directory in the second argument it automatically errors and says its not a file but i need it to accept it if its a directory as well. Also I believe i have some things wrong under the directory if statement also. Here is my script

  original=$PWD
  # There must be two arguments input on the command line
  if [ �$#� -gt 2 ]
  then
          echo "error: Too many arguments.  Must provide two arguments."
          echo "usage: $0 search-pattern file"
          exit
  elif [ �$#� -lt 2 ]
  then
          echo "error: Not enough arguments.  Must provide two arguments."
          echo "usage: $0 search-pattern file"
          exit
  elif [ -f $2 ]   # Verify that the command line argument  is a file
  then
  # Verify that the second command line argument is a file, then call srchfile.sh
          /export/home/zero3/srchfile.sh $1 $2
  elif [ ! -f  $2 ]   # Verify that the command line argument  is a file
  then
          echo "error: Second argument must be a file"
          echo "usage: $0 search-pattern file"
          exit
  fi
  elif [ -d $2 ]   # Verify that the command line argument is a directory
  then
  # Verify that the second command line argument is a directory.
  # Then change directories to the one specified as the second command line argument.
          cd $2
          listing=`ls -l | grep -c $1`
          for entry in $2
          do
              # Verify that the name read in the directory is a file
                  if [ -f * ]
                  then
              # Verify that the second command line argument is a file, then call srchfile.sh
                          /export/home/zero3/srchfile.sh $1 $2
                  fi
          done
  fi
  cd $original
  

Any help is appreciated.

---------- Post updated 10-03-10 at 12:06 AM ---------- Previous update was 10-02-10 at 06:06 PM ----------

Ok so I have broke this down to a simpler form. Exactly what i can't figure out is how
to get the srchfile.sh to look at each file in the directory. I need it to list each file then list each line that matches the argument $1
Here is a simpler script

original=$PWD
# There must be two arguments input on the command line
if [ $# != 2 ]
then
        echo "error: Must provide two arguments"
        echo "usage: $0 search-pattern file"
elif [ $# -lt 2 ]
then
# If there are less then two command line arguments, output an error message.
        echo "error: Must provide two arguments."
        echo "usage: $0 search-pattern file"
elif [ -f $2 ]   # Verify that the command line argument  is a file
then
# Verify that the second command line argument is a file, then call srchfile.sh
       ./srchfile.sh $1 $2
elif [ -d $2 ]   # Verify that the command line argument is a directory
then
# Verify that the second command line argument is a directory.
# Then change directories to the one specified as the second command line argument.
        cd $2
        listing=`ls -l | grep -c -f *`
        for entry in $listing
        do
        # Verify that the name read in the directory is a file
                if [ -f $2 ]
                then
        # Verify that the second command line argument is a file, then call srchfile.sh
                /export/home/zero3/srchfile.sh $1 $2
                fi
        done
fi
cd $original

the last part should list the files and lines here is the srchfile.sh for reference

  if [ �$#� != 2  ]
  then
              # Output error messages if two arguments weren't provided.
          echo "error: Must provide two arguments"
          echo "usage: $0 search-pattern file"
  elif [ ! -f $2 ]
  then
              # If  less than two arguments are provided, output an error message.
          echo "error: Second argument must be a file"
          echo "usage: $2 not a file"
  else 
          echo "----- File = $PWD/$2 ------"
          OUTPUT=`egrep -in $1 $2`
          echo "$2"
  fi
  

Hope this helps

Try this one:
[highlight=sh]#!/bin/sh
# There must be two arguments input on the command line(you need only one test here).
if [ $# -ne 2 ];then
echo "Error: You must provide two arguments."
echo "Usage: $0 search-pattern file"
exit 1
fi

search_file(){
grep -l $1 $2
if [ $? -eq 0 ];then
grep $1 $2
fi
}

if [ -f $2 ] && [ -r $2 ];then
search_file $1 $2
elif [ -d $2 ] && [ -x $2 ];then
for i in $(ls $2);do
if [ -f $2/$i ] && [ -r $2/$i ];then
search_file $1 $2/$i
fi
done
fi
exit 0
[/highlight]