UNIX Shell Scripting (Solaris) for File Checking


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting UNIX Shell Scripting (Solaris) for File Checking
# 29  
Old 06-02-2016
hi made in germany,

thank you and i am trying your code right now. but can you check my script at post #26?. what went wrong or what is my mistake? super thank you so much for the help.

Last edited by daveaztig14; 06-08-2016 at 06:39 AM..
# 30  
Old 06-02-2016
The directories you are searching, the strings you are matching, the names of the files you are processing in the directories you are searching, and the shell you are using seems to change with every post you make. We can't keep up with all of the changes you are making and we still do not have a clear description of what you are trying to do. (Especially whether some of the pathnames you are supplying are the names of files to be processed or the names of directories [AKA folders] containing files to be processed.)

But some problems with your code in post #26:
Code:
#list all folders for FTR
folderFTR="/files05/home/chgtpst/GT/outb/CHTR/FTR/9/archive_ia
/files05/home/chgtpst/GT/outb/CHTR/FTR/9/send_ia
/files05/home/chgtpst/GT/outb/CHTR/FTR/9/send"

#list all folders for VRZ
folderVRZ="/files05/home/chgtpst/GT/outb/CHTR/VRZ/9/archive_ia
/files05/home/chgtpst/GT/outb/CHTR/VRZ/9/send
/files05/home/chgtpst/GT/outb/CHTR/VRZ/9/send_ia/success"


#Main program for FTR
for f in $folderFTR
do
    if [ 'grep FTRORD -l "$f"' ]
    then
        echo "invalid file in $f" >> /home/abainzd/logfile.txt

    else
       exit 1 
    fi
done


#Main program for VRZ
for f in $folderVRZ
do
    if [ 'grep CHTRVRZPRD -l "$f"' ]
    then
        echo "Invalid file in $f" >> /home/abainzd/logfile.txt

    else
       exit 1 
    fi
done

include (but might not be limited to):
  1. You have said you are using the Korn shell, but there is nothing in this script that specifies that. Make the 1st line of your script be #!/bin/ksh.
  2. We can't tell from what you have shown us whether the three pathnames you assigned to the shell variable folderVRZ are the names of directories (which you call folders) or are pathnames of three regular files in the directory /files05/home/chgtpst/GT/outb/CHTR/VRZ/9.
  3. The test command [ 'grep FTRORD -l "$f"' ] ALWAYS evaluates to true because the argument being evaluated 'grep FTRORD -l "$f"' is a non-empty fixed string. It does not execute grep and it does not expand "$f" (shell variables are not expanded when they are surrounded by single quotes) to the name of a file (directory or regular file). And, assuming (based solely on the name of your variables) that you intend for $f to expand to the name of a directory, the grep utility looks for matches to a regular expression in the text file(s) named as its file operand(s); it does NOT search all of the files in a directory named as a file operand and it does not try to match filenames in a directory to your regular expression. The behavior of grep is only defined when the pathnames of the files you ask it to process are text files (and directories are not text files)!
I apologize for not noticing that you used /bin/sh when you ran my script instead of /bin/ksh) after you had told us at least three times that you were using the Korn shell.

I apologize for not mentioning that you would have to use /usr/xpg4/bin/grep instead of /usr/bin/grep to use the -q option.

I have absolutely no explanation for why you modified the script I suggested in post #21 to process the four files you described in post #20:
Code:
cd home/solaris/unix/samplefiles/ && \
for file in *.txt
do	if ! grep -q davehandsome "$file"
	then	printf 'File "%s" does not contain the string "davehandsome"\n' "$file"
	fi
done

to:
Code:
cd $EDI_ROOT/GT/outb/CHTR/VRZ/9/send && \
for file in *.edi
do      if ! /usr/xpg4/bin/grep  -q CHTRVRZPRD "$file"
        then    printf 'File "%s" does not contain the string "CHTRVRZPRD"\n' "$
file"
        fi
done

and ran it in a directory where there are no filenames that end with the string .edi when you said you wanted to look for a different string in one of four existing files in a different directory.

If you had told us that some of the directories you want to search do not contain any files, we would have suggested different code, perhaps something more like:
Code:
#!/bin/ksh
EDI_ROOT="/absolute/path/to/directory"
# The absolute pathname of the directory named by EDI_ROOT must contain a
# subdirectory accessible by the relative pathname "BT/outb/CHTR/VRZ/9/send".

cd $EDI_ROOT/GT/outb/CHTR/VRZ/9/send && \
for file in *.edi
do      if [ -f "$file" ] && ! /usr/xpg4/bin/grep  -q CHTRVRZPRD "$file"
        then    printf 'File "%s" does not contain "CHTRVRZPRD"\n' "$file"
        fi
done

Note that case matters in Solaris and other UNIX systems. The string "UNIX" and the string "unix" are NOT the same. (Case matters!)

If you were asked (as an EE) to create a circuit that is given +5V DC power and instead of +5V DC power the user connected it to 120V AC power, should we be disappointed if your circuit exploded? If you tell us you want to search for a string in a bunch of files that match a certain filename matching patter in a directory, don't be surprised if a grep command that we suggest doesn't do what you want if you ask it to process files matching a pattern that does not match any files in that directory. If you tell us you want to search for a string in a bunch of files in a directory, don't be surprised if a grep command that we suggest doesn't do what you want if you give it the name of a directory to process instead of a list of one or more files in that directory to process.

Computers can do some things very quickly. They usually do exactly what you ask them to do even if what you ask them to do is dangerous. In CS we have a frequently referenced acronym: GIGO (Garbage In, Garbage Out). If your specifications are not clear (GI), the results you get from running code written to meet what the programmer guesses you meant are likely to give you GO.

Please help us help you!
This User Gave Thanks to Don Cragun For This Post:
# 31  
Old 06-03-2016
hi don,

i understand and im refelcting all of the things right now.. and im so sorry.. for all the change of post and directories and variable and all.. thanks a lot for your help.

Last edited by daveaztig14; 06-08-2016 at 06:40 AM..
# 32  
Old 06-03-2016
Thank you for the much clearer specification. But, there are still a few things missing in your specification:
  1. You didn't mention the pathname of the log file you want to create. (This script uses /files05/home/chgtprd/logfile.txt.) Note that the directory in which the log file is located MUST NOT be the directory named by the variable dir!
  2. You didn't mention whether this script should recreate the log file each time it runs, or would just add information to an existing log file. (This script recreates the log file each time it runs. To append instead of recreate, change both occurrences of > "$log" to >> "$log".)
  3. This code assumes that you only want to look at regular files in the named directory (not at all regular files in the file hierarch rooted in the named directory).
With the assumptions stated above, the following script should do what you have requested on a Solaris system (although I did take a few liberties with the messages written to your log file). I assume that you will be able to adjust the text in the printf statements if you don't like the text I used.:
Code:
#!/bin/ksh
bad_found=0
dir='/files05/home/chgtprd/MXS/inb/CHTR/FTR/9/'
log='/files05/home/chgtprd/logfile.txt'

cd "$dir" && for file in *
do	if [ -f "$file" ] && ! /usr/xpg4/bin/grep -q FTRORD "$file"
	then	printf 'Invalid file "%s" in "%s"\n' "$file" "$dir"
		bad_found=1
	fi
done > "$log"
if [ $bad_found -eq 0 ]
then	printf 'There are no invalid files in "%s"\n' "$dir" > "$log"
fi


Last edited by Don Cragun; 06-07-2016 at 12:49 AM.. Reason: Fix copy&paste error: Add fi to end of script.
# 33  
Old 06-06-2016
hi don,

1) sorry i forgot to mention that the log file should be created in
Code:
/home/abainzd

thank you

Last edited by daveaztig14; 06-08-2016 at 06:40 AM..
# 34  
Old 06-07-2016
Sorry,
Although it won't affect the operation of the script, the last two lines in your script should not be indented.

I had a copy and paste error that dropped the last line of the script (which has now been corrected in post #32). Either add the line:
Code:
fi

to the end of the script, or change the last two lines of the script from:
Code:
if [ $bad_found -eq 0 ]
then    printf 'There are no invalid files in "%s"\n' "$dir" > "$log"

to:
Code:
[ $bad_found -eq 0 ] && printf 'There are no invalid files in "%s"\n' "$dir" > "$log"

# 35  
Old 06-08-2016
Hi don,,

i added

Code:
fi

on the last line and it works perfecrtly.. tahnk you so much..

Last edited by daveaztig14; 06-08-2016 at 06:41 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Solaris Shell Scripting

Hi, Want to know, is there any way to restrict a Solaris user to Single Login. Means a particular user can login once and if he or someone else tries to login with his ID then a message displayed "user already logged in" and denies his attempt. Regard, Jeet (1 Reply)
Discussion started by: CountJeet
1 Replies

2. Shell Programming and Scripting

Read csv file, convert the data and make one text file in UNIX shell scripting

I have input data looks like this which is a part of a csv file 7,1265,76548,"0102:04" 8,1266,76545,"0112:04" I need to make the output data should look like this and the output data will be part of text file: 7|1265000 |7654899 |A| 8|12660000 |76545999 |B| The logic behind the... (6 Replies)
Discussion started by: RJG
6 Replies

3. Shell Programming and Scripting

How to add trailer record at the end of the flat file in the unix ksh shell scripting?

Hi, How to add trailer record at the end of the flat file in the unix ksh shell scripting can you please let me know the procedure Regards Srikanth (3 Replies)
Discussion started by: srikanth_sagi
3 Replies

4. Shell Programming and Scripting

Request for file read option in Unix shell scripting

Hi Friends, I would like to read all the record from one txt file to other file txt For example I have two txt file a.txt and b.txt. I need to read a.txt record by record and I need add the system date @ end of each record before moving it to b.txt. Could you please share the coding for... (4 Replies)
Discussion started by: vinoth124
4 Replies

5. Shell Programming and Scripting

generate tabular output from an input text file in unix shell scripting

Hi, I have the output (as below) which i want it to be in a table. For e.g. space utilization in PSE on path /logs is 0% space utilization in PSE on path /logs/tuxedo/tuxlsp is 16% space utilization in PSE on path /ldvarlsp/lsp/log is 37% space utilization in PSE on path /home is 6%... (7 Replies)
Discussion started by: pkbond
7 Replies

6. Shell Programming and Scripting

C Shell Scripting - HELP! - checking total args in a script

Hi, I 'm trying to learn the scripting language and am trying to create a script to open a C Program, allow the user to edit it, and then run it. What I have works but only when you enter the name to be compiled and the c program, but what if you only entered the 1 argument (cprogram.c) ? but I 'm... (3 Replies)
Discussion started by: patel_ankz
3 Replies

7. UNIX for Dummies Questions & Answers

Unix Shell Scripting -- update employees not present in input file

ALL, My shell script takes a employee file as input. I have to identify the list of employees not in the input file and update their status in the database. Approach I followed: by traversing through the input file add all the emplid's to a variable. update the status of employees not in... (2 Replies)
Discussion started by: sailussr
2 Replies

8. Solaris

How to check the file existence using shell scripting in Solaris-10

Hi, I have a script which will check the fiel existence, the lines are as below if !(test -d ./data) then mkdir data fi In the first line error occurs as below generatelicense.sh: syntax error at line 2: `!' unexpected Where as this script works fine in linux OS. How to solve... (2 Replies)
Discussion started by: krevathi1912
2 Replies

9. AIX

Unix shell scripting to find latest file having timestamp embedded...

Hi guys, I have a directory in UNIX having files with the below format, i need to pickup the latest file having recent timestamp embedded on it, then need to rename it to a standard file name. Below is the file format: filename_yyyymmdd.csv, i need to pick the latest and move it with the... (2 Replies)
Discussion started by: kaushik25
2 Replies

10. Shell Programming and Scripting

difference between AIX shell scripting and Unix shell scripting.

please give the difference between AIX shell scripting and Unix shell scripting. (2 Replies)
Discussion started by: haroonec
2 Replies
Login or Register to Ask a Question