What if the incoming request to the test script is from a tool call Jenkins and the parameters could be multiline strings or comma separated which enforces us to have quotes around each argument. Any suggestions on such a case?
Then I would suggest posting a sample of what that looks like so we can contemplate ways to deal with it. Post what it looks like in the tool, and the actual arguments the shell receives.
OP's script is trivially solved with
...but I suspect there's spaces you don't want to split on too, and we have no idea how to tell those apart from those spaces which you do.
OP's problem is also trivially worked around just by doing ./test.sh '-aEurope' '-bIndia' '-cProduction'
Last edited by Corona688; 07-23-2019 at 02:01 PM..
I was looking for the solution proposed by @Corona688. However, if the last arguments '-c' does not have any value associated which is fine; the script fails and displays the helpFunction. I want -c to be optional with or without a value. So, '-c' or '-c<args>' both should work.
Changing
to
makes all parameters optional however, I am looking for just parameter -c to be optional (-c may not neccessarily be the last parameter)
I want the solution to work for both bash and non-bash.
I'm using a helpfunction like below:
and
Last edited by mohtashims; 07-25-2019 at 03:13 AM..
Reason: To provide more information about parameter c
I was looking for the solution proposed by @Corona688. However, if the last arguments '-c' does not have any value associated which is fine; the script fails and displays the helpFunction. I want -c to be optional with or without a value. So, '-c' or '-c<args>' both should work.
I don't think the builtin getopts allows for optional arguments, unfortunately. If you are on a GNU system and have access to the external GNU version of getopt you can have optional arguments to one or more of your options, but I believe getopt is considered deprecated. Its usage is also inconsistent with that of getopts.
Location: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Posts: 2,288
Thanks Given: 430
Thanked 480 Times in 395 Posts
Hi.
In solving problems, I find it most useful to search for solutions before inventing my own. I keep a list of notes and sources for command-line-processing, posted below. You may want to consider items 4 and 5 below, neither of which is trivial to use. However, because of your requirement to run on all shells, I think you will probably have to do your own processing with the lowest common denominator features of the Bourne shell -- no additional features such as found on bash, ksh, zsh, etc. Of course, you could choose the most-feature-rich shell, possibly zsh or pwsh, and write simple driver scripts for the other shells, provided you can install zsh / pwsh on all systems that you need. The perl modules have extensive support for command-line options, so one could write a perl code that processed arguments, and then have the perl code call a vanilla shell script with simple arguments.
Good luck, I'd be interested in how you solve this ... cheers, drl
Hello.
Here is a file contents :
declare -Ax NEW_FORCE_IGNORE_ARRAY=(="§" ="§" ="§" ="§" ="§" .................. ="§"Here is a pattern
=I want to extract 'NEW_FORCE_IGNORE_ARRAY' which is the whole word before the first occurrence of pattern '='
Is there a better solution than mine :... (3 Replies)
Hi,
I have some data like below:
John 254
Chris 254
Matt 123
Abe 123
Raj 487
Moh 487
How can i print it using awk to have:
254 John,Chris
123 Matt,Abe
487 Raj,Moh
Thanks. (4 Replies)
Hi,
Is this possible? I want to take a csv file and find the closest value in another csv file preceding it and following it.
For ex. In this csv file, I'll take the first line:
1309341156.800000000
1309341156.802500000
1309341156.805000000
1309341156.807500000
and find the closest... (2 Replies)
Gurus:
How can I transpose the output below to a format in which I can plot a graph to show VSZ memory usage by PIDs?
stdout:
Tue Jan 22 07:29:19 CUT 2013
42336296 1841272 java wilyadm
21889232 438616 jlaunch sidadm
42532994 414336 jlaunch sidadm
Tue Jan 22 07:49:20 CUT 2013... (1 Reply)
Hello,
I have an xml file whose contacts are like below:
<Node>Apple
<B>Value1</B>
<B>Value2</B>
<B>Value3</B>
</Node>
<Node>Mango
<B>Value1</B>
<B>Value2</B>
<B>Value3</B>
</Node>
<Node>Apple
<B>Value1</B>
<B>Value2</B>
<B>Value3</B>
</Node>
<Node>Bannana (3 Replies)
Hi
Following is an example line.
echo "192.22.22.22 \"33dffwef\" 200 300 dsdsd" | sed "s:\(\ *\ \):\1:"
I want it's output to be
200
However this is not the case. Can you tell me how to do it? I don't want to use AWK for this. Secondly, how can i fetch just 300? Should I use "\2"... (3 Replies)
Hi,
I am looking for a way to find a particular word in a file then print a line that precedes this line, as well as this line.
Sometimes in a log file there is only one word per line and I need to print one of the lines leading up to the single worded line.
Example - I can grep for ouch... (5 Replies)
Hi,
while compiling my c++ program, I get the following Message:
/usr/include/iso/math_iso.h", line 84: Error: No direct declarator preceding "("
Does anybody know this?
Thanks
Nik (1 Reply)