Аргументы командной строки Bash, заменив значения по умолчанию для переменных

У меня есть сценарий, который имеет несколько входных файлов, обычно это значения по умолчанию, хранящиеся в стандартном месте и вызываемые сценарием.

Однако иногда необходимо запускать его с измененными входами.

В сценарии у меня есть, скажем, три переменные: $ A $ B и $ C. Теперь я хочу запустить его с $ B не по умолчанию, а завтра я могу захотеть запустить его с $ A и $ B не по умолчанию.

Я посмотрел вокруг, как разобрать аргументы командной строки:

Как мне разобрать аргументы командной строки в Bash?

Как мне иметь дело с тем, чтобы иногда устанавливать аргументы командной строки?

У меня недостаточно очков репутации, чтобы ответить на мой собственный вопрос. Однако у меня есть решение:

Переопределить переменную в скрипте Bash из командной строки

#!/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

Ответы

Ответ 1

Вы можете сделать это следующим образом. См. Расширение параметров оболочки на справочной странице Bash.

#! /bin/bash

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

В командной строке:

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

Ответ 2

Вместо того чтобы использовать аргументы командной строки для перезаписи значений по умолчанию, вы также можете установить переменные вне скрипта. Например, следующий скрипт может быть вызван с помощью foo=54 /tmp/foobar или bar=/var/tmp /tmp/foobar:

#! /bin/bash
: ${foo:=42}
: ${bar:=/tmp}
echo "foo=$foo bar=$bar"