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