Bash command line arguments, replacing defaults for variables

22,214

Solution 1

You can do it the following way. See Shell Parameter Expansion on the Bash man page.

#! /bin/bash

value=${1:-the default value}
echo value=$value

On the command line:

$ ./myscript.sh
value=the default value
$ ./myscript.sh foobar
value=foobar

Solution 2

Instead of using command line arguments to overwrite default values, you can also set the variables outside of the script. For example, the following script can be invoked with foo=54 /tmp/foobar or bar=/var/tmp /tmp/foobar:

#! /bin/bash
: ${foo:=42}
: ${bar:=/tmp}
echo "foo=$foo bar=$bar"
Share:
22,214
Admin
Author by

Admin

Updated on July 28, 2020

Comments

  • Admin
    Admin almost 4 years

    I have a script which has several input files, generally these are defaults stored in a standard place and called by the script.

    However, sometimes it is necessary to run it with changed inputs.

    In the script I currently have, say, three variables, $A $B, and $C. Now I want to run it with a non default $B, and tomorrow I may want to run it with a non default $A and $B.

    I have had a look around at how to parse command line arguments:

    How do I parse command line arguments in Bash?

    How do I deal with having some set by command line arguments some of the time?

    I don't have enough reputation points to answer my own question. However, I have a solution:

    Override a variable in a Bash script from the command line

    #!/bin/bash
    a=input1
    b=input2
    c=input3
    while getopts  "a:b:c:" flag
    do
        case $flag in
            a) a=$OPTARG;;
            b) b=$OPTARG;;
            c) c=$OPTARG;;
        esac
    done