#!/usr/bin/env bash # - See 'man env' and the discussion involving 'env' # and invoking Perl # in "Programming Perl", by Larry Wall # bcmp, Bash "CoMPiler" # this program really just runs some housekeeping # chores you should do before trying to run a bash script. # This is partly inspired by a discussion of software # configuration management I read somewhere # (source forgotten) discussing the nightly 'build' # of some perl scripts, which rather than compiling them # they were put through regressions tests to verify they # were ready to run. # Many of the commands used in this were things I'd come # across lately that seemed to fit in with this idea. # # 7 June 2008 Dallas E. Legan II USAGE="${0##*/} -h | <script>" ; THESCRIPT=${1:?"What script file? Usage: ${USAGE}"} ; [ -f ${THESCRIPT} ] || { echo ${USAGE} ; exit ; } ; set -e ; # - This causes bash to go into 'abort on command error' mode # See "Linux Journal", Feb. 2008, p. 10, "Letters" # "mkdir Errors Even More Trivial", Ed L. Cashin # http://www.linuxjournal.com/article/9957 # This is also documented in 'man bash' and 'help set' # in somewhat obscure, too understated a way. # 9 July 2008 addition: # This is also referenced in # the "bash Cookbook", # Carl Albing, JP Vossen & Cameron Newham # O'Reilly, (C) 2007 # ISBN-10: 0-596-52678-4 # ISBN-13: 978-0-596-52678-8 # http://www.bashcookbook.com/ # p. 75 - 76 # Recipe 4.6 "Using Fewer if Statements" sed -i 's/ *$//' ${THESCRIPT} ; # - to strip out trailing blanks, particularly annoying # after '\' 'line continuations' # '-i' causes 'editing in place'. # (Addition 1 July 2008:) # I came across another reason for this # in the "bash Cookbook", # p. 57 - 59, # Recipe 3.3 "Preventing Weird Behaviour in a Here-Document" # 'trap' on page 59 in particular. # Basicly, trailing spaces on here document delimiters # can cause a bad day. # -- # Alternatively, this might be done using # 'ed', to make it more traditional and portable. # For now, I'm leaving out this idea, # but you might want to install some commands # to verify that the number of # '(' == ')' (outside 'case' statements) # '[' == ']' # '{' == '}' # Total number of "'" and '"' are even, etc. # Seperate checks for these might make # make interpreting the results easier to figure out. chmod ugo+x ${THESCRIPT} ; # - simply to set the permissions to executable bash -n ${THESCRIPT} ; # - to do a simple syntax check # per the "bash Cookbook", # p. 476 - 477 # Recipe 19.12 "Testing bash Script Syntax" # also 'man bash' and 'help set', # where this is obscurely documented. cp ${THESCRIPT} ~/bin/ ; # - Lastly, copy the script to a directory in PATH, # this could be any satisfactory location. # You might also want to check the script into some # version control system at this point, # or runs some functional/regression tests. echo ${THESCRIPT} seems ready to run ; # 9 July 2008 addition: # This is an idea Garth told me about while at # Rockwell - when it doesn't conflict with the # purpose of the program, it's good to have a # message telling if it succeeded or not. # This was in the mainframe world, # and this can conflict with the needs of # Unix programs, but a good idea when practical. # END OF SCRIPT
Monday, June 9, 2008
A bash Tool
I was writing a bash script the other day, and got fed up with having to take seperate steps to handle a lot of the routine steps to make it useable. So, I piled them all together. This bundles together several ideas I been exposed to in the last week.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment