"if" and "then" statement is not working in RedHat

 
Thread Tools Search this Thread
Operating Systems Linux Red Hat "if" and "then" statement is not working in RedHat
# 1  
Old 01-20-2011
"if" and "then" statement is not working in RedHat

Dear experts,

I'm trying to write a script to calculate the usage of Log Archive in a directory, so if it gets to a point where the directory size is 60%, then send out an FYI.. email. So if then it reaches to 80%, move the logs from that directory.

I have written the script as follow but I'm getting errors. Your help is really needed and appreciated!

Script:

Code:
#!/bin/csh
set OUTPUTLOG="$HOME/logs/Log_Archive/ORA_Log_Archive.log"
set DATE=`date`
echo "--------------------------------------------------------" >> $OUTPUTLOG
echo "Log_Archive script started at $DATE" >> $OUTPUTLOG
echo "--------------------------------------------------------" >> $OUTPUTLOG
set HOST=`hostname`
set DATE=`date +"%m"-"%d"-"%Y"_"%H":"%M"`
set NUMARCHLOGS=`ls $HOME/xyz | wc -l`
set LOG_ARCH_PERCENT=`df -m $HOME/xyz | grep -v "Filesystem" | awk '{print int(substr($4,0,length($4)-1))}'`
#
echo "There are $NUMARCHLOGS Logs in $HOME/xyz >> $OUTPUTLOG

        if ($LOG_ARCH_PERCENT > 60) then
echo "Log_Arive since it's at $LOG_ARCH_PERCENT" >> $OUTPUTLOG        
mail -s "Subject:Log Archive is at $LOG_ARCH_PERCENT% on $HOST" xyz@xyz.com
endif
 
if ($LOG_ARCH_PERCENT > 80) then
mv $HOME/xyz/* $HOME/xyzbackup >> $OUTPUTLOG
echo "Moving  Log_Arive since it's at $LOG_ARCH_PERCENT" >> $OUTPUTLOG        
mail -s "Subject:Log Archive is moved to a xyzbackup on $HOST" xyz@xyz.com
            endif

Thanks,
Moderator's Comments:
Mod Comment
Please use code tags when posting data and code samples!

Last edited by vgersh99; 01-20-2011 at 01:27 PM.. Reason: code tags, please!
# 2  
Old 01-20-2011
You might need a refresher course in bourne/bash scripting.

You could use:

Code:
if [ $LOG_ARCH_PERCENT -gt 60 ]; then

for portability... or if you assume bash (common on Linux):
Code:
if [[ $LOG_ARCH_PERCENT > 60 ]]; then

This User Gave Thanks to cjcox For This Post:
# 3  
Old 01-21-2011
You have to use the test command to do the comparison. Test can be replaced by square brackets as per the previous post.
This User Gave Thanks to KevinGB For This Post:
# 4  
Old 01-21-2011
Hi Cjcox and KevinGB,

I did try this before, however, it gave me the following error

Error:
Code:
@NUMARCHLOGS=10: Command not found.
if: Expression Syntax.

I'm still getting this error even after using "[]" syntax. I have cut down the script as follow. Can you please help me to figure out where the problem would be?

Script:

Code:
set OUTPUTLOG="$HOME/logs/Log_Archive/ORA_Log_Archive.log"
set DATE=`date`
echo "--------------------------------------------------------" >> $OUTPUTLOG
echo "Log_Archive script started at $DATE" >> $OUTPUTLOG
echo "--------------------------------------------------------" >> $OUTPUTLOG
set HOST=`hostname`
set DATE=`date +"%m"-"%d"-"%Y"_"%H":"%M"`
@NUMARCHLOGS=`ls $HOME/LOG | wc -l`
set LOG_ARCH_PERCENT="df -m $HOME/LOG | grep -v "Filesystem" | awk '{print int(substr($4,0,length($4)-1))}'"
#
if [ $LOG_ARCH_PERCENT -gt 80 ]; then
        echo "Moving  Log_Arive since its at $LOG_ARCH_PERCENT" >> $OUTPUTLOG
        mv $HOME/LOG/* $HOME/backup/archive >> $OUTPUTLOG
        mail -s "Subject:Log Archive is moved to a xyzbackup on $HOST" syz@abc.com< $OUTPUTLOG
endif


Your help is really appreciated!

Thanks,
Moderator's Comments:
Mod Comment
Please use code tags when posting data and code samples!

Last edited by vgersh99; 01-21-2011 at 10:57 AM.. Reason: once AGAIN - please use code tags!
# 5  
Old 01-21-2011
try below syntax...

if [[ $LOG_ARCH_PERCENT -ge "60" ]]; then
# 6  
Old 01-21-2011
Hi Subhash,

Thanks for the help. I have tried the following commands/sysntaxes but getting the same issues.
Code:
if [[ $LOG_ARCH_PERCENT -gt "60" ]]; then
if [[ $LOG_ARCH_PERCENT -ge "60" ]]; then
if [ $LOG_ARCH_PERCENT -gt "60" ]; then
if [ $LOG_ARCH_PERCENT -ge 60 ]; then
if [[ $LOG_ARCH_PERCENT -gt `60` ]]; then
if [[ $LOG_ARCH_PERCENT -ge `60` ]]; then

Any idea?

Thanks,

Moderator's Comments:
Mod Comment Is there some part of "Please use code tags" you don't understand?

Last edited by Scott; 01-21-2011 at 02:03 PM.. Reason: Code tags
# 7  
Old 01-21-2011
I'm no C Shell expert but isn't the if sytax something like:
Code:
if (whatever) do_something


Anyway, I think the main error is on line 12. You are missing the closing quotes:
Code:
"There are $NUMARCHLOGS Logs in $HOME/xyz" >> $OUTPUTLOG


Last edited by verdepollo; 01-21-2011 at 11:42 AM.. Reason: Line 12, not line 13.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Solaris

The slices "usr", "opt", "tmp" disappeared!!! Help please.

The system don't boot. on the screen appears following: press enter to maintenance (or type CTRL-D to continue)...I checked with format command. ... the slices "0-root","1-swap","2-backup" exist. ...the slises "3-var","6-usr" -unassigned. :( (16 Replies)
Discussion started by: wolfgang
16 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

ps -ef | grep "string1" "string2" " "string3"

Hi all, can any one suggest me the script to grep multiple strings from ps -ef pls correct the below script . its not working/ i want to print OK if all the below process are running in my solaris system. else i want to print NOT OK. bash-3.00$ ps -ef | grep blu lscpusr 48 42 ... (11 Replies)
Discussion started by: steve2216
11 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question