2013-05-01 141 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 2013-05-01 14:13:14

+0

謝謝,我在關聯的問題上看到了這一點。 我想知道是否有一些標準的方法來讓命令參數覆蓋變量。例如,當在python中定義函數時,可以設置一個默認值。 我可以看到,如果檢查,我可以用命令行參數替換默認值,但不確定是否有一個標準的方式做到這一點? – Lanrest 2013-05-01 14:48:28

回答

6

除了使用命令行參數來覆蓋默認值外,您還可以在腳本之外設置變量。例如,下面的腳本可以foo=54 /tmp/foobarbar=/var/tmp /tmp/foobar調用:

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

我想過這個,但是我正在編輯的腳本適用於比我自己更不熟悉的人。我想讓它儘可能簡單,我認爲命令行參數是他們更熟悉的東西。 – Lanrest 2013-05-01 15:32:23

35

你能做到這樣,看到Shell Parameter Expansion在bash的手冊頁

#! /bin/bash 

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

在命令行:

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