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
Code:
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
Code:
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
Code:
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
I am trying to change this :
Albert Einstein 52
Peter Scott 22
Hilary Smith 48
Joan Bakewell 30
Catherine Maguire 26
into
Albert Einstein Pass
Peter Scott Fail
Hilary Smith Pass
Joan Bakewell Fail
Catherine Maguire Fail
I have to use a if statement that says:
if field 3 is... (2 Replies)
I had different problem scenarios with IF statement. Can any expert please enlighten me on the difference with these scenarios. Thank you.
1st Scenario:
testdate=`date +%Y%m`
test=`cat /var/log/database0.$testdate*.log | grep "Errors found during processing" | tail -10`
if
then
... (4 Replies)
This is for a program I have to do to calculate the day of the week.
I need to write an if statement that will do the following:
if day is 29 and year is odd, don't calculate dayif ( day == 29 && year == ??? )I know how to do it for the day but I don't know how to do it for the year. (4 Replies)
I am kind of new in Unix and i have to make a menu. I want to put an if statement in the menu. you should enter the filename and it goes to that file. How do i do this? (1 Reply)
Good morning all!
I want to know if Im interpreting this if statement below right.
if(((1) || (0)) && (1)){
do stuff;
}
This is saying: if true piped into false, then true, then do stuff. Right?
What does the && stand for?
thanks in advance!
ben (3 Replies)
Hi
I am very new to Unix programming and shell scripting. I am trying t figure out how to write a little script that will output the number of directories. I can find the number of directories using ls -l | grep "^d" | wc -l I can not figure out how to do it so when I type the name... (8 Replies)
Hi guys,
Two problems I need solving please. I created a script where the user types in 7 numbers as standard input and each one is then stored in an array. Now I need to perform the following calculations on those numbers:
1) Use a while loop to determine the largest number in the range.
... (2 Replies)
1. The problem statement, all variables and given/known data:
Two problems I need solving please. I created a script where the user types in 7 numbers as standard input and each one is then stored in an array. Now I need to perform the following calculations on those numbers:
1) Use a while... (11 Replies)
I came across a bash script that outputs the forecast for the day and the max temperature but at the end of the day the max temperature disappears ($6) and I am left with "°C" after the forecast.
Here is the script:
#! /bin/bash
curl -s --connect-timeout 30... (7 Replies)