2013-05-01 6 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

あなたはこのようにそれを行うことができますが、コマンドラインで、bashのmanページでShell Parameter Expansion

#! /bin/bash 

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

を参照してください。

$ ./myscript.sh 
value=the default value 
$ ./myscript.sh foobar 
value=foobar 
関連する問題