07-21-2008
parsing command line switches in Perl
Hi,
My perl script takes few switches which i'm parsing through GetOpt::Long module.
My script looks like something :
myscript.pl --file="foo" --or --file="bar"
The --file switch takes 2 arguments foo and bar.
The 2 values of file are separated by --or switch. I want to ensure that the --or switch only comes between the 2 --file switches.
I know the --or switch may also be redundant since the hash "%options" will contain the key file which will point anonymous array, [foo bar].
So the script may also look like : myscript.pl --file="foo" --file="bar"
However to ensure readability I want to keep --or switch to make the user understand that the --file switches takes one value or the other.
Does anyone have the idea whether it is possible in the GetOpt::Long module to check the occurence of a switch in between 2 other switches, like --or switch should only occur between the 2 --file switches and should not occur alone by itself.
Thanks in advance
Obelix.
10 More Discussions You Might Find Interesting
1. UNIX for Advanced & Expert Users
Is there a way to get the command line arguments.
I am using getopt(3) but if the arguments are more than one for a particular option than it just ignores the second argument. For eg
./a.out -x abc def
now abd will be got with -x using getopt "( x : )" and string abc\0def will get stored... (7 Replies)
Discussion started by: jayakhanna
7 Replies
2. UNIX for Dummies Questions & Answers
how to parse the command line argument to look for '@' sign and the following with '.'.
In my shell script one of the argument passed is email address. I want to parse this email address to look for correct format.
rmjoe123@hotmail.com has '@' sign and followed by a '.'
to be more... (1 Reply)
Discussion started by: rmjoe
1 Replies
3. Shell Programming and Scripting
Hello,
Im very new to PERL and as a project to work on developing my skills at PERL Im trying to parse poker hands.
Ive tried many methods however I cant get the last step.
$yourfile= 'FILENAME';#poker hands to parse
open (FILE, "$yourfile") or die $!;
@lines = <FILE>;
for (@lines) ... (1 Reply)
Discussion started by: Ek0
1 Replies
4. Shell Programming and Scripting
Looking for a little help parsing some command line arguments in a bash script I am working on, this is probably fairly basic to most, but I do not have much experience with it.
At the command line, when the script is run, I need to make sure the argument passed is a file, it exists in the... (3 Replies)
Discussion started by: Breakology
3 Replies
5. Shell Programming and Scripting
I have a simple script that builds a complex program call which passes a number of parameters to the program. I'm trying to enhance the script to include the value of the command line parameter in the name of a file being created. The problem I'm having is that the parameter may include a forward... (11 Replies)
Discussion started by: pbmax626
11 Replies
6. Programming
Hi,
I've a python script called aaa.py and passing an command line option " -a" to the script like, ./aaa.py -a
& Inside the script if the -a option is given I do some operation if not something else.
code looks like
./aaa.py -a
.
.
if options.a
---some operation---
if not options.a... (1 Reply)
Discussion started by: testin
1 Replies
7. Shell Programming and Scripting
i want to call subroutines in perl like:
sub temp
{ ---- some code ----- }
temp(-switchName, value1, --switchName2, value2)
Like i know getoptions::Long is there for command line switches type arguments. So i want to know for subroutine type arguments. (1 Reply)
Discussion started by: Navrattan Bansa
1 Replies
8. Shell Programming and Scripting
Hi all
I need to put a command line parser together to parse numeric fields and ranges passed to a script. I'm looking for a bash function that is as elegant and simple as possible.
So the input would be of the following form -
1,2,8-12
This would return -
1,2,8,9,10,11,12
Input can... (7 Replies)
Discussion started by: steadyonabix
7 Replies
9. Shell Programming and Scripting
I would like to take a fasta file formated like
>0001
agttcgaggtcagaatt
>0002
agttcgag
>0003
ggtaacctga
and use command line perl to move the all sample gt 8 in length to a new file. the result would be
>0001
agttcgaggtcagaatt
>0003
ggtaacctga
cat ${sample}.fasta | perl -lane... (2 Replies)
Discussion started by: jdilts
2 Replies
10. Shell Programming and Scripting
Hi Experts,
How do I parse a XML with below contents
<saw:user name="mbussey@xyz.com" />
<saw:user name="kimmy.chan@pqr.com" />
<saw:user name="chudgins@gmail.com" />
and retrieve below output ?
mbussey@xyz.com
kimmy.chan@pqr.com
chudgins@gmail.com
... (17 Replies)
Discussion started by: pauldx
17 Replies
LEARN ABOUT DEBIAN
shell-quote
SHELL-QUOTE(1p) User Contributed Perl Documentation SHELL-QUOTE(1p)
NAME
shell-quote - quote arguments for safe use, unmodified in a shell command
SYNOPSIS
shell-quote [switch]... arg...
DESCRIPTION
shell-quote lets you pass arbitrary strings through the shell so that they won't be changed by the shell. This lets you process commands
or files with embedded white space or shell globbing characters safely. Here are a few examples.
EXAMPLES
ssh preserving args
When running a remote command with ssh, ssh doesn't preserve the separate arguments it receives. It just joins them with spaces and
passes them to "$SHELL -c". This doesn't work as intended:
ssh host touch 'hi there' # fails
It creates 2 files, hi and there. Instead, do this:
cmd=`shell-quote touch 'hi there'`
ssh host "$cmd"
This gives you just 1 file, hi there.
process find output
It's not ordinarily possible to process an arbitrary list of files output by find with a shell script. Anything you put in $IFS to
split up the output could legitimately be in a file's name. Here's how you can do it using shell-quote:
eval set -- `find -type f -print0 | xargs -0 shell-quote --`
debug shell scripts
shell-quote is better than echo for debugging shell scripts.
debug() {
[ -z "$debug" ] || shell-quote "debug:" "$@"
}
With echo you can't tell the difference between "debug 'foo bar'" and "debug foo bar", but with shell-quote you can.
save a command for later
shell-quote can be used to build up a shell command to run later. Say you want the user to be able to give you switches for a command
you're going to run. If you don't want the switches to be re-evaluated by the shell (which is usually a good idea, else there are
things the user can't pass through), you can do something like this:
user_switches=
while [ $# != 0 ]
do
case x$1 in
x--pass-through)
[ $# -gt 1 ] || die "need an argument for $1"
user_switches="$user_switches "`shell-quote -- "$2"`
shift;;
# process other switches
esac
shift
done
# later
eval "shell-quote some-command $user_switches my args"
OPTIONS
--debug
Turn debugging on.
--help
Show the usage message and die.
--version
Show the version number and exit.
AVAILABILITY
The code is licensed under the GNU GPL. Check http://www.argon.org/~roderick/ or CPAN for updated versions.
AUTHOR
Roderick Schertler <roderick@argon.org>
perl v5.8.4 2005-05-03 SHELL-QUOTE(1p)