Аргументы командной строки 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"