Sponsored Content
Homework and Emergencies Emergency UNIX and Linux Support Waiting for wildcard filename to exists in while loop Post 302916767 by bakunin on Thursday 11th of September 2014 10:26:40 PM
Old 09-11-2014
Quote:
Originally Posted by Amey Joshi
Code:
#!/bin/ksh

path="/home/user/"
triggerfile="Trigger*.done"
counter=0
max_counter=12
actualfile=${path}${triggerfile}

while [ ! -f ${actualfile} ]; do
let counter=counter+1
if [ $counter -ge $max_counter ]
then
 echo "email reached max counter"
else
 sleep 5
fi
done

I am not sure if i understand you correctly: you want to wait for a file that has a (literal) wildcard character in its name instead of having that wildcard character expanded?

You can easily get this by enclosing the variable into double quotes:

Code:
# ls
filea fileb filec
# file="*"
# echo "$file"
*
# echo $file
filea fileb filec

It is the same in your loop:

Code:
while [ ! -f "${actualfile}" ]; do

but the problem already comes from a previous line, where you use your variable unprotected (unquoted):

Code:
actualfile=${path}${triggerfile}

You should generally protect your variables and only use them without quotes in the few cases where you need them to be interpreted:

Code:
actualfile="${path}${triggerfile}"

But there are other problems with your code you probably are not aware of. Here is your code after a bit of straightening (you should not name a variable "path", btw., it is too easy to be confused with the system variable PATH):

Code:
#!/bin/ksh

triggerpath="/home/user"
triggerfile="${triggerpath}/Trigger*.done"
counter=0
max_counter=12

while [ ! -f "$triggerfile" ] ; do
     (( counter += 1 ))
     if [ $counter -ge $max_counter ] ; then
          echo "email reached max counter"
     else
          sleep 5
     fi
done

1. You have no "sleep" command when in the TRUE-branch of the "if". Instead of testing every 5 seconds as before it tests as often as it can once "$counter" reaches "$max_counter". You may want to move the "sleep"-command outside the if:

Code:
while [ ! -f "$triggerfile" ] ; do
     (( counter += 1 ))
     if [ $counter -ge $max_counter ] ; then
          echo "email reached max counter"
     fi
     sleep 5
done

2. This is a remote chance, but you increment the counter continually. Since you have no "sleep" between tests once "$counter" reaches threshold you might eventually increment over the size of shell numerics, which are integers.

Code:
while [ ! -f "$triggerfile" ] ; do
     if [ $counter -eq $max_counter ] ; then
          echo "email reached max counter"
     else
          (( counter += 1 ))
     fi
     sleep 5
done

I hope this helps.

bakunin
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Find wildcard .shtml files in wildcard directories and removing them- How's it done?

I'm trying to figure out how to build a small shell script that will find old .shtml files in every /tgp/ directory on the server and delete them if they are older than 10 days... The structure of the paths are like this: /home/domains/www.domain2.com/tgp/ /home/domains/www.domain3.com/tgp/... (1 Reply)
Discussion started by: Neko
1 Replies

2. Shell Programming and Scripting

test if a filename exists with specified string (ksh)

I'm trying to do a simple if statement that tests if a filename exists with a user specified string. So say I have these files: Assigned_1day_after_due_chuong Assigned_1day_after_due_gallen Assigned_1day_after_due_heidenre and i'm running a script and want to know if a... (6 Replies)
Discussion started by: bob122480
6 Replies

3. Shell Programming and Scripting

filename in loop

i have a filename_1=file1.dat filename_2=file2.dat i want to pass the filename in a loop for((i=1;i<=2;i++) do awk{print $1} $filename_$i.dat done how should i pass the filename (2 Replies)
Discussion started by: r_t_1601
2 Replies

4. Shell Programming and Scripting

ksh(!93) for loop with wildcard and empty directory

I'm sure this is by design, but using something like for f in dir/* do echo $f done produces unexpected (to me) results if run against an empty directory. I'd have expected it to not execute the loop, but it actually calls it with f set to 'dir/*'. Now I know that I'm trying to protect... (2 Replies)
Discussion started by: spr00t
2 Replies

5. Shell Programming and Scripting

Use the information from filename in a for loop

hi here is my script set -vx b=`cat /info_d05/visage/SrcFiles/Customer_Master/Log_Files/last_date.txt` for name in /info_d05/visage/SrcFiles/Customer_Master/Input_Files/* do fname=`basename $name` p=`$fname|cut -d"_" -f6|sed 's/\(.*\)....../\1/'` if then cp... (6 Replies)
Discussion started by: djrulz123
6 Replies

6. Shell Programming and Scripting

Wildcard search in if loop

Practice folder contains many files and im interested in extracting file which starts with abc* ghi* xyz* . I need to do variety of operations for different files. if file starts with xyz* then i need to move to some destination otherwise some other destination. I am not able to make wildcard... (15 Replies)
Discussion started by: kumaar1986
15 Replies

7. Shell Programming and Scripting

For loop without checking file exists

In several scripts that process files matched by name pattern I needed to add a check for file existence. Just to illustrate let's say I need to process all N??? files: /tmp$ touch N100 N101 /tmp$ l ?10 -rw-rw-r-- 1 moss group 0 Apr 19 11:22 N100 -rw-rw-r-- 1 moss group ... (10 Replies)
Discussion started by: migurus
10 Replies

8. Shell Programming and Scripting

Verify if filename exists

Hi, I have a variable returned from Oracle SQL Function which holds file names. I would like to test if all the file names mentioned in the string exists in a directory. If all the files exists print "exists", even if one file does not exists print "Does not exists". e.g. ... (3 Replies)
Discussion started by: pointers1234
3 Replies

9. AIX

Issue with wildcard in filename (AIX 7.1.0.0)

Hi, This has been pestering me for quite a while, any help will be highly appreciated The current directory has a file with below name npidata_20050523-20171210.csv The below wildcard matched the above file ls -ltr npidata_????????-201712??.csv But when the part '201712' is put... (6 Replies)
Discussion started by: zulfi123786
6 Replies
All times are GMT -4. The time now is 05:21 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy