Default values for positional parameters - dummy question I think
Hi,
Sorry for a dummy question I believe. I am just wanting to know how do I assign a default $1 argument if one is not provided.
At the moment, I am doing something like below:
And then I check $arg1 in case/esac. I am just wondering if there is a way for me to simply do ${1:-foo} and check $1 in case/esac.
At the moment, if I simply do ${1:-foo} and run the script, it seem to be trying to run the foo command instead. Script is working fine just curious for whether I can set $1 to a default value without having to assign it to a variable.
While this works well on short script, with just a single invocation of it, but as soon there are more than one occourence of this syntax, you'll need to change all of them rather than just a single variable assignment.
---------- Post updated at 18:38 ---------- Previous update was at 18:33 ----------
In fact you are doing it more right then wrong: declare (sensible) default values for variables not explicitly stated at the commandline. You might want to explore the "getopts" command in ksh for passing certain values to a script, which works mostly the same way as the "getopt" OS command.
Quote:
Originally Posted by newbie_01
Sorry for a dummy question I believe. I am just wanting to know how do I assign a default $1 argument if one is not provided.
In short: not at all! You see, "$1" is the first parameter passsed on the commandline and if this is empty, it is empty. Analogous for "$2", "$3", etc..
Consider the OS command line:
The command "command" is passed "abc" as the first parameter, "123" as the second and "def" as the third. If "command" wouldl be a ksh script "$1" would be set to "abc" and so on. If you pass fewer parameters then less of these variables are set. Otherwise, if you pass more then "$4" and so on also will have values.
But usually you want parameters to have a certain meaning and ideally this meaning is not dependent on the place where the variable is passed:
If the first parameter passed is a configuration file and the second one an output destination this:
would not only fail but probably first try to read file2 as configuration, then destroy your real configuration in file1 by overwriting it. Better would perhaps be:
because what is config and what is output will be stated by the option preceeding it. These two calls:
will both work the same. This mechanism is indeed standardized and "getopts" is a command to standardizedly parsing your commandline. Here is code for the above example
This leaves just one problem: what if the user does not set one of the necessary options? You can either do it like you already did: assign a default value in case the values is not already set. This could be done via adding a last line in the code above with your construct. The other way is to set the default before:
I suggest you try this script with various invocations, with and without one or all parameters.
Hint: robust script programming would mean to actually test files for existence/non-existence and issue warnings about an output file that already exists or a config file which doesn't (or is not readable). I have skipped that here to make the example as simple as possible.
I am trying to code an if statement that accepts two parameters and see if those parameters are in another file called teledir.txt. If it already exists in the file, it is to say "Entry Exists". If not, I add it to the file and say "Entry Added". This is the code I have so far:
if ; then
... (1 Reply)
I'm new with 'sed' and for sure something still I don't understand yet with it. If you see my output on ">Output..." portion, the new directory still on "source_dir" instead of "dest_dir". You may disregard for the "tar" part, this is just a test script, just for me to understand 'sed' using the... (3 Replies)
In a Bash script I used getopts command to let a user does something regards to the selected options. The question is: How do you find out what is the name of the file that user inserted in the command line like the following:
The good part is this file is always the last argument in the... (2 Replies)
Hi all,
I have one small requirment...
I have prepared one script. we have to pass two possitional parameters to the script. What I want to do is if the parameters are not passed then i dont want the script to start the process...
For ex:
$ ./a.sh parm1 parm2
#Here, it can start... (7 Replies)
Hi,
I have a script that processes the positional parameters provided on the command line, or - if none are provided - uses some defaults instead.
I've currently got it written as follows, which works like a charm, but I was wondering if there is a different/other/better/... way of doing... (2 Replies)
Hi,
Can any one provide the Unix command to reset the positional parameters?
Please see the below example where i have to pass 2 parameters to Shell1.sh.
Step1) . ./Shell1.sh 2 3
successfully executed, Then i executed(next step only) the same shell script again,this time no... (4 Replies)
I need to get file names from commandline arguments, it may be any no of arguements, Using for loop i got but how do i display it, bcoz $i will give the number i is assigned $$i is not working either $($i), i need the names of the files got in the arguement (2 Replies)
Hello,
I am using the Bourne shell.
I am trying to understand the concept of positional parameters.
I do understand that positional parameters:
1. Are initialized by shell
2. Have a max of 9 parameters ($1 to $9)
3. Have no limit on the number of arguments
4. Can be rearranged... (15 Replies)
HPUX11.0/Korn Shell
I have an old script that takes in a series of arguments when its called. The script is really more of a common set of functions that gets called by other scripts as needed. I have been asked to make this into a menu driven script to rollout to app support for their use during... (2 Replies)