Passing arguments from a bash shell script to a command
I'm pretty new to bash scripting and I've found myself writing things like this (and the same with even more nesting):
There must be an easier way to do this... I've tried searching for the answer but haven't had much luck (probably because I don't know the right keywords to search for). Any help would be much appreciated!
That if-statement is wrong, I presume you're using -z or something to tell if they're blank...
Build a string:
If done carefully, this ought to even preserve spaces in arguments right, since the exact string "$@" expands to all the previous aruments exactly as given, warts and all.
Last edited by Corona688; 02-24-2012 at 11:53 AM..
Thanks... that ought to be enough to let me figure it out. FWIW, the original code looked like this, and it works. (Which are certainly not to say that it couldn't be cleaner -- I'm only just starting with bash scripting.)
Thanks... that ought to be enough to let me figure it out. FWIW, the original code looked like this, and it works. (Which are certainly not to say that it couldn't be cleaner -- I'm only just starting with bash scripting.)
You've made two fundamental errors in such a way that they cancel each other out and work correctly here. I'm impressed
"true" and "false" are not special values to bash. They're just strings.
But...
As it happens, there are external utilities named true and false. true always returns success, and false always returns error.
Also, the code if program arguments ... is a way of checking the result of an external program. If $VARNAME was 'rm -Rf /home/myusername/', if $VARNAME would run the command rm -Rf /home/myusername/. If 'rm' succeeded in deleting your home directory, it would return a zero value, which the if-statement would consider a boolean 'true'. If it failed for some reason and returned a nonzero code, that would be a boolean 'false'.
So you've been converting the strings true and false into zero or nonzero program return codes, by running external programs that happen to be named true and false, then checking their result. Rather the long way around!
Seeing the code, if your filenames and arguments will never contain spaces, you can make this much much simpler:
Last edited by Corona688; 02-24-2012 at 01:15 PM..
Thanks! That's extremely helpful. I should be okay now.
FWIW, I didn't invent the true/false -- I got them out of an introduction to getopts that I found somewhere on the web. (And I hadn't had cause to use conditionals in a script before.)
Unfortunately I do have to deal with the possibility of spaces in filenames. (One of my collaborators works on a Mac, and this seems to be a perpetual issue there.) But I should still be able to adapt the
[ ! -z "$LABEL_SLOTS" ] && set -- "$@" "--label-slots"
to do the trick, right?
Edit: Actually, ack, it's just occurred to me that if I use set inside the getopts loop things are liable to go very wrong! I'll use three flags instead.
Yes, set -- would mess up your arguments if you were still using the arguments at the time. Good thinking realizing that.
In the case of spaces in filenames, I'd use flags like you had, but use the set -- trick as well:
You can also use arrays instead of "set --" to keep an argument list, but "set --" works in any bourne shell -- bash, ksh, old-fashioned sh, zsh, and more. This script would be simple to use anywhere. BASH arrays on the other hand only work when BASH is available...
---------- Post updated at 11:30 AM ---------- Previous update was at 11:26 AM ----------
Hi All,
I have below simple shell script in cloudera quick start vm cenos 6 which copy file from source to destination.
# file_copy.sh
source_dir = ${source_dir}
target = ${target_dir}
cp source_dir target
and my parameter file is like below
#parameter_file.txt
source_dir =... (4 Replies)
I found something insteresting when I tested passing arguments into my scripts.
My scripts is as below.
% cat passarg.env
#!/bin/csh
echo "passarg: argv = $argv argv = $argv"
passarg1.env $*
% cat passarg1.env
#!/bin/csh
echo "passarg1: argv = $argv argvp=$argv"
set str = "test... (5 Replies)
Dear Users,
I have installed a standalone program to do multiple sequence alignment which takes user parameters to run the program. I have multiple sequence files and want to automate this process through a bash script. I have tried to write a small bash code but its throwing errors.
Kindly... (13 Replies)
Hi,
I wanted to pass an argument to a bash script. So that the argument is used inside the awk command inside the bash script.
I know the noraml way of passing argument to a bash script as below :
sh myScript.sh abc
Inside the bash script i can use like this
myArg1=$1
wc $myArg
But... (8 Replies)
Hi Gurus,
Need some help with the shell scripting here.
#!/bin/ksh
ps -ef | grep -i sample.ksh | grep -v grep > abc.txt
if
then
echo "sample.ksh is executing"
else
echo "sample.ksh is not executing"
fi (1 Reply)
Hello
Please i want to pass parameter (the string s) to the shell script:
Quote:
String s="Hello";
Process process = Runtime.getRuntime().exec("sh script1.sh");
How can i do please?
Thank you (0 Replies)
hi everobody
kindly consider the following
in tclsh
I understand that we can do the following
%exec UnixCmd arg1 arg2
but if I assinged the arguments to a list insde tclsh how can I use them back
i.e
%set ArgList
%exec UnixCmd
%exec Unixcmd $list
%exec
all the... (1 Reply)
Hi, hope everyone are fine. Please find my issue below, and I request your help in the same
In a configuration file, i have a variable defined as below
TEST = 'One','Two','Three'
I am trying to pass this variable in to a sql script which is define in a pl/sql block
as follows,
In the... (1 Reply)
hi I am new to shell programming.....my question is while running one of my shell program it stops in between to accept input from the user and proceeds furthur after giving input....I want to know whether I can set this input through some files so that the shell acript reads the input from the... (10 Replies)
Hi,
I have a shell script Scp_1.sh for which I have to pass 2 arguments to run.
I have another script Scp_2.sh which in turns calls script Scp_1.sh inside.
How do I make Scp_1.sh script to read arguments automatically from a file, while running Scp_2.sh?
--
Weblogic Support (4 Replies)