2013-05-01 4 views
15

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

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

В скрипте я в настоящее время говорю 3 переменные $ A $ B и $ C, теперь я хочу запустить его с нестандартным $ B, завтра я могу запустить его с не умолчанию $ A и $ B ,

Я имел взгляд вокруг, как для разбора аргументов командной строки: How do I parse command line arguments in Bash?

Но я не знаю, как иметь дело с тем, что некоторые наборами по командной строке aruguments части времени?

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

https://stackoverflow.com/a/4610469/2339623

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

Извиняюсь я, очевидно, не искавший так тщательно, как я думал ...

+4

Для этой цели вы можете использовать 'getopts'. Есть много учебников, что-то вроде http://aplawrence.com/Unix/getopts.html может быть полезно для начала. – fedorqui

+0

Спасибо, я видел это на вопросах, которые я связал. Мне было интересно, есть ли какой-то стандартный способ, чтобы аргументы команды перезаписывали переменные. Например, при определении функций в python можно установить значение по умолчанию. Я вижу, что с помощью проверки if я могу заменить значение по умолчанию аргументом командной строки, но не был уверен, был ли стандартный способ сделать это? – Lanrest

ответ

6

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

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

Я думал об этом, однако сценарий, который я редактирую, предназначен для людей с еще меньшим знанием, чем я. Я хочу сделать это как можно проще, и я думаю, что аргументы командной строки - это то, с чем они более знакомы. – Lanrest

35

Вы можете сделать это таким образом, увидеть Shell Parameter Expansion в Баш человека странице

#! /bin/bash 

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

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

$ ./myscript.sh 
value=the default value 
$ ./myscript.sh foobar 
value=foobar 
Смежные вопросы