[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[LDM #UKU-190526]: LDM - PIPE usage in pqact.conf and bash scripts
- Subject: [LDM #UKU-190526]: LDM - PIPE usage in pqact.conf and bash scripts
- Date: Tue, 17 Apr 2007 14:50:26 -0600
Hi Mike,
I appreciate AND empathize with your comments about the pains of learning
how to do create shell scripts from popular press books (although the
O'Reilly are typically some of the best). I find myself in much the same
boat... my scripting language of choice is Tcl (of Tcl/Tk) mainly since
I was forced to learn it in order to use Tk. The good news is that the
books I read on Tcl were chock full of useful examples that could be
run as is and produce expected results and then modified to experiment.
Anyway, there is a problem with the last script that I sent you. The
'if' clause is not correct. It should read:
# Log results
if $?; then
echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: Error writing ncdump
output, exit status = $?"
else
echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: FILE $1
rm -f $DIRS/pipencdump
fi
Steve pointed this out to me noting that 'if false; then' will always evaluate
to false since false is actually a program:
man false
FALSE(1) User Commands FALSE(1)
NAME
false - do nothing, unsuccessfully
SYNOPSIS
false [ignored command line arguments]
false OPTION
DESCRIPTION
Exit with a status code indicating failure.
...
So, the first branch of the script as sent would never be executed.
Also, it would be a good idea to check the exit status of each
program that is run so that execution would not continue past such
an error. In the spirit of this notion, I offer the following rewrite
of ldmfile.sh:
#!/bin/bash
#---------------------------------------------------------------------
#
# Name: ldmfile.bash
#
# Purpose: file an LDM product and log the receipt of the product
# Note: modify the "log" file for a specific use!
#
# History: 20070412 - Created from example Bourne shell script
# provided by Unidata
# 20070416 - Modified by Tom at Unidata
#
#------------------------------------------------------------------------
# set log file
LOG=/usr/local/ldm/MADIS_data/logs/MADIS_log
exec >>$LOG 2>&1
# Create directory structure
FNAME=$(basename $1)
DIRS=$(echo $1 | sed s/$FNAME//)
mkdir -p $DIRS
# Write stdin to the designated file
gunzip -cf > $DIRS/pipencdump
if $?; then
echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: Error gunziping input, exit
status = $?"
exit
fi
# Create an ASCII version of the netCDF
ncdump $DIRS/pipencdump > $1
if $?; then
echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: Error writing ncdump
output, exit status = $?"
exit
fi
# Success
echo $(date -u +'%b %d %T') $(basename $0)\[$$\]: FILE $1
rm -f $DIRS/pipencdump
# done
exit
Cheers,
Tom
****************************************************************************
Unidata User Support UCAR Unidata Program
(303) 497-8642 P.O. Box 3000
address@hidden Boulder, CO 80307
----------------------------------------------------------------------------
Unidata HomePage http://www.unidata.ucar.edu
****************************************************************************
Ticket Details
===================
Ticket ID: UKU-190526
Department: Support LDM
Priority: Normal
Status: Closed