Since I seem to deal with a lot more XML documents than I would like, using JavaScript + E4X as a command line scripting language is a godsend. Below is an example on how to build a quick and dirty command line arguments parser.
var args = {};
var params = [];
for each( var arg in arguments )
{
if( arg.indexOf( "-" ) == 0 )
{
arg = arg.substring( 1 ).split( "=" );
args[ arg.shift() ] = arg[0] == null ? true : arg.join( "=" );
}
else
params[ params.length ] = arg;
}
Here is a real world example:
function usage()
{
print( "Usage: dump-queue.sh url queue user password [ -collate | -num=num | -ack | -path=... | -print | -raw | -prefetch |" );
print( " -timeout=millis | -listen | -browse | -list ]" );
print( "" );
print( " -collate - put messages in folders named after original message destination queue" );
print( " -num - only retrieve num messages" );
print( " -ack - acknowledge messages after retrieving safely" );
print( " -path - root path to dump messages" );
print( " -print - print messages to stdout" );
print( " -raw - message only, leaves out headers and properties" );
print( " -prefetch - enable prefetching" );
print( " -timeout - how long to wait idle before stopping" );
print( " -listen - stay up forever" );
print( " -browse - only count the messages in the queue" );
print( " -list - if browsing, return the message ids instead of the count" );
print( " -help - this message" );
print( "" );
}
var args = {};
var params = [];
args["timeout"] = 5000;
for each( var arg in arguments )
{
if( arg.indexOf( "-" ) == 0 )
{
arg = arg.substring( 1 ).split( "=" );
args[ arg.shift() ] = arg[0] == null ? true : arg.join( "=" );
}
else
params[ params.length ] = arg;
}
var url = params.shift();
var queueName = params.shift();
var user = params.shift();
var password = params.shift();
if( args[ "help" ] || password == null )
{
usage();
System.exit( 1 );
}
[Update: 11/8/05] copied wrong, older, code. added .join().
Leave a comment