Problem with Bash Script.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Problem with Bash Script.
# 1  
Old 05-04-2012
Error Problem with Bash Script.

Hi guys!

I'm new to the forum and to the Bash coding scene.

I have the following code


Code:
paths[0]=/test/a
paths[1]=/test/b
keywords[0]=\"*car*\"
keywords[1]=\"*food*\"

for file in `find paths[] -type f -ctime -1 -name keywords[] -print 2>/dev/null`
do

   #.... do stuff here for every $file found

done

Basically Im trying to make a script that goes to X amount of [Paths] to check if theres a file with [Keyword] thats been there in the past 24 hours.

I would like to loop my path and keywords inside that "find" command and I dont seem to find a way. Ive tried using ${keyword[0]} and it doesnt work.

Any help or any other approach you suggest me will be welcome!

Thanks in advance.

Last edited by RedSpyder; 05-04-2012 at 11:13 AM..
# 2  
Old 05-04-2012
It's certainly not going to work if you force the string to contain quotes. It will search for files with literal quotes in their names.

Also, just repeating the list won't work either. You need -name a -o -name b -o -name c, etc.

Paths can be used as-is, since find takes a literal list there.

You don't even need arrays here. The shell is perfectly capable of splitting strings at need.

So I'd just assemble a list in the $1, $2, ... variables and use it. Then you can pretty much just find "$@"

Code:
#!/bin/sh
paths="/test/a /test/b"
keywords="*car* *food*"

set -f # prevent *car* from globbing here
for X in $keywords
do
        if [ -z "$1" ]
        then
                set -- -name "$X"
        else
                set -- "$@" -o -name "$X"
        fi
done

echo find $paths -type f -ctime 1 '(' "$@" ')'

Code:
$ ./findl.sh

find /test/a /test/b -type f -ctime 1 ( -name *car* -o -name *food* )

$

It works in any and every bourne shell I have since it doesn't use arrays.

Last edited by Corona688; 05-04-2012 at 12:44 PM..
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 05-04-2012
Also, don't put the results of the find in backticks there. Do

Code:
find ... | while read LINE
do
        echo "line is $LINE"
done

Since that's not prone to bad splitting or too-many-arguments.
This User Gave Thanks to Corona688 For This Post:
# 4  
Old 05-05-2012
Worked like a charm without errors!!

Thanks a lot for your help! Learned a lot with this example!

You'll see me around a lot, I'm starting to deal with this at work and I've never done this before.
# 5  
Old 07-31-2012
Hi Corona!
I'm trying to reuse this part of the code but I would like to make sure I understand it first.

Quote:
Originally Posted by Corona688
Code:
keywords="*car* *food*"

set -f # prevent *car* from globbing here
for X in $keywords
do
        if [ -z "$1" ]
        then
                set -- -name "$X"
        else
                set -- "$@" -o -name "$X"
        fi
done

I have doubts with the following lines:
Code:
if [ -z "$1" ]

- What does the -z means in here?
Code:
set -- "$@" -o -name "$X"

- Basically you are assigning $@ everything inside $X?

Thanks in advance
# 6  
Old 07-31-2012
Quote:
Originally Posted by Corona688
...
Code:
find /test/a /test/b -type f -ctime 1 ( -name *car* -o -name *food* )

It works in any and every bourne shell I have since it doesn't use arrays.
...
Wouldn't the wildcards around filenames need to be escaped?
Wouldn't ctime's parameter need a '-' sign so find searches <= 24 hrs, not = 24hrs?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Array problem in Bash Script

I am trying to write a Bash Script using a couple of arrays. I need to perform a countdown of sorts on an array done once daily, but each day would start with the numbers from the previous day. This is what I'm starting with : #!/bin/bash days=(9 8 7 6 5) for (( i = 0 ; i < ${#days} ; i++... (4 Replies)
Discussion started by: cogiz
4 Replies

2. Shell Programming and Scripting

Bash/awk script problem

Hi, I have 100 files containing different values in single column, I want to split those files in two separate files (file2 and file3) based on average value of first column of each file, for those files I am working on the following script #bin/bash for memb in $(seq 1 100) do awk... (4 Replies)
Discussion started by: dsp80
4 Replies

3. Shell Programming and Scripting

Help with bash script problem

Hi, Below is my bash script: cat run_all.sh if && ; then Number_Count_Program $1.results $2.results > $1.$2.counts else Number_Split_Program $1.results $2.results > $1.$2.split fi After I run the following command: ./run_all.sh A B ./run_all.sh: line 1: Anybody advice to edit... (5 Replies)
Discussion started by: perl_beginner
5 Replies

4. Shell Programming and Scripting

Problem using grep in bash script

When it comes to programing and UNIX, I know just enough to be really really dangerous. I have written a python script to parse through a file that contains ~1 million lines. Depending on whether a certain string is matched, the line is copied into a particular file. For the sake of brevity,... (4 Replies)
Discussion started by: errcricket
4 Replies

5. Shell Programming and Scripting

help with a bash script problem

hi to everyone :) i am new to linux and bash and i am trying to build a bash script, that is quite similar to the well known cmd 'split' ... ;) it is now already "working" ... i can use it like: ./splitfix.sh -v -s 10 foo ./splitfix.sh -s 10 -v foo ./splitfix.sh -s 10 foo ./splitfix.sh -v... (5 Replies)
Discussion started by: drjodo
5 Replies

6. Shell Programming and Scripting

problem using variables in bash script

I am using variable to give the location of the file I am using but I get error. Here is the code: LogFile=/tmp/log.email echo -e "could not close the service - error number $error \n" > $LogFile well this is not all the code but is enough because the problem start when I try to use the... (3 Replies)
Discussion started by: programAngel
3 Replies

7. Shell Programming and Scripting

Simple bash script problem

#!/bin/bash cd /media/disk-2 Running ./run.sh it's not changing directory.Why? (6 Replies)
Discussion started by: cola
6 Replies

8. Shell Programming and Scripting

Problem in bash script

I have written a script and I get error and I don't understand why. neededParameters=2 numOfParameters=0 correctNum=0 while getopts "s:l:" opt do case "$opt" in s) serviceName= $OPTARG #errorline 1 numOfParameters= $numOfParameters + 1 ;; l) ... (12 Replies)
Discussion started by: programAngel
12 Replies

9. UNIX for Dummies Questions & Answers

Bash script argument problem

I'm having problems with bash scripts. If a bash script is called with no arguments, I always get "PHIST=!" as the first argument (i.e. this is what $1 equals). Why? Where does this come from, and how can I fix it? Nothing in the bash man pages refer to this mysterious default argument. (2 Replies)
Discussion started by: sszd
2 Replies

10. Shell Programming and Scripting

bash script problem

hi I am writing a bash script that uses dialog to get user input an diplay messages to user. I have a small problem dialog --inputbox "blabla" 20 50 2> /tmp/output VAR="'cat /tmp/output'" mkdir $VAR the code below requests user for a directory path to be created. But, if the user uses... (1 Reply)
Discussion started by: fnoyan
1 Replies
Login or Register to Ask a Question