Bash command line arguments, replacing defaults for variables

Lanrest picture Lanrest · May 1, 2013 · Viewed 18.2k times · Source

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

Answer

codeape picture codeape · May 30, 2013

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