Request for Nom-Nom August 13, 2008
Posted by Derek in technology, what "you do here".Tags: code, shell script
trackback
We’re still using shell scripts in a Fortune 200 company. Pure hackery. (This wordpress theme is not wide enough, but you get the idea…)
#!/bin/ksh
#
# Shell script to make a backup of the previously compressed file if it exists,
# execute the YUI-Compressor on the specified source file, and clean up the
# backup directory so that it doesn't grow too large
#
trap huphandler HUP
trap '' QUIT
trap exithandler TERM INT
huphandler()
{
print 'Received SIGHUP'
}
exithandler()
{
print 'Received SIGTERM or SIGINT'
exit 1
}
if [ $# -ne 3 ]; then
echo 1>&2 "Usage: yuicompressor <source file-name> <source file-type> <output file-name>"
echo "e.g. home.src.js js home.cmp.js"
exit 1
fi
if [ $1 == $3 ]; then
echo "Error: Source filename and output filename cannot be the same."
exit 1
fi
#echo "Enter the source filename to compress and the type of file; e.g. newNWA.src.css css:"
if [[ -z $2 ]]; then
echo "Please enter a file type, usually it's \"js\" or \"css\":"
read file_type
fi
#echo "Enter the output filename: e.g. newNWA.cmp.css"
if [[ -z $3 ]] ; then
echo "output_file is null, I cannot compress"
exit
else
# make a backup copy first
if [ -f $3 ]; then
echo "Output file already exists, making a backup..."
NOW=$(date +"%Y%m%d.%H-%M-%S")
FILENAME=$3.$USER.$NOW
cp $3 /weblogs/backup/yuicompressor/$FILENAME
chmod 775 /weblogs/backup/yuicompressor/$FILENAME
echo "Output file backed up, now compressing $source_file..."
else
echo "No existing output file found to backup. Starting compression of $source_file..."
fi
#perform the compression
/usr/java14/bin/java -jar /opt/www/scripts/yuicompressor-2.3.6/build/yuicompressor-2.3.6.jar --type $2 $PWD/$1 -o $PW
D/$3
#cleanup backup directory
echo "Checking to see if backup directory cleanup is needed..."
cd /weblogs/backup/yuicompressor/
files_in_dir=`ls $3.$USER.* | wc -l`
files_to_delete=`expr $files_in_dir - 3`
if [ $files_to_delete -gt 0 ]; then
echo "Cleaning up backup directory..."
ls -t | tail -n $files_to_delete | xargs rm
if [ $? -ne 0 ]; then
echo .An error ocurred deleting the files.
exit 1
else
echo "$files_to_delete file(s) deleted."
fi
else
echo "No cleaning of backup directory needed."
fi
fi
/me hugs C#
Keep in mind this is not production code. It’s just an operational tool to make it easier to execute the command-line Java application.
But it’s still a shell script…