web-dev-qa-db-ja.com

変数のデフォルトを置き換えるBashコマンドライン引数

私はいくつかの入力ファイルを含むスクリプトを持っています。通常、これらは標準の場所に保存され、スクリプトによって呼び出されるデフォルトです。

ただし、入力を変更して実行する必要がある場合があります。

スクリプトには、たとえば、$ A $ B、$ Cという3つの変数があります。ここで、デフォルト以外の$ 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
25
Lanrest

次の方法で行うことができます。 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
59
codeape

コマンドライン引数を使用してデフォルト値を上書きする代わりに、スクリプトの外部で変数を設定することもできます。たとえば、次のスクリプトはfoo=54 /tmp/foobarまたはbar=/var/tmp /tmp/foobarで呼び出すことができます。

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