シェルコードは、コードを呼び出すと変数を変更します。

シェルコードは、コードを呼び出すと変数を変更します。

シェルコードはほとんど書かれていませんが、コードを呼び出すときに変数を変更する必要があります。これを行う方法

はい

./shell.sh --varaible="New Value"

出力しなければならない

New Value,Some Value

シェル

variable="Old Value"
variable2="Some Value"

echo "$variable,$variable2"

答え1

スクリプトが変数値を明示的に設定している場合、コマンドラインからスクリプトの変数値を変更することはできません。

ただし、コマンドライン引数を考慮した方法で変数の値を設定できます。


コマンドラインで指定された引数はシェルスクリプトで使用できます。位置パラメータ $1、、$2など$3

変数を最初の位置引数に設定するには、次のようにします。

variable="$1"

したがって、スクリプトは次のようになります。

#!/bin/sh

variable="$1"
variable2="Some Value"

echo "$variable,$variable2" # or printf '%s,%s\n' "$variable" "$variable2"

...そして呼び出されます

$ ./script.sh "New Value"

出力は次のとおりです

New Value,Some Value

提供する基本変数値の場合は、次のことができます。

variable="${1:-Old Value}"

上記のスクリプトでこれを使用すると、スクリプトOld Value,Some Valueがコマンドライン引数なしで呼び出されたかどうかが出力に表示されます。


次の短いスクリプトは、3つのコマンドラインフラグ-a-b正しいコマンドライン解析を実行します-c。パラメータをフラグ付けして-a許可-bしますが、-cパラメータは許可しません。これは、コマンドラインフラグを使用してデフォルト値をオーバーライドできる3つの変数、およびvar_avar_b使用します。var_c

最後に、スクリプトはこれらの変数の値を表示し、コマンドラインで提供できる他のすべての項目も表示します。

#!/bin/sh

var_a=12
var_b="yellow"
var_c=0

while getopts 'a:b:c' opt; do
    case "$opt" in
        a) var_a=$OPTARG ;;
        b) var_b=$OPTARG ;;
        c) var_c=1 ;;
        *) echo 'command line parsing error' >&2
           exit 1
    esac
done

shift $(( OPTIND - 1 ))

printf 'var_a = %s\nvar_b = %s\nvar_c = %s\n' \
    "$var_a" "$var_b" "$var_c"

if [ "$#" -gt 0 ]; then
    echo 'Other operands:'
    printf '%s\n' "$@"
fi

数回実行してみてください。

$ ./script.sh
var_a = 12
var_b = yellow
var_c = 0

$ ./script.sh -b "green tea" "hello world"
var_a = 12
var_b = green tea
var_c = 0
Other operands:
hello world

$ ./script.sh -c my other car is a cdr
var_a = 12
var_b = yellow
var_c = 1
Other operands:
my
other
car
is
a
cdr

$ ./script.sh -a -d
var_a = -d
var_b = yellow
var_c = 0

$ ./script.sh -a
./script.sh[15]: -`a' requires argument
command line parsing error

$ ./script.sh -a "boo!" "help!" -c
var_a = boo!
var_b = yellow
var_c = 0
Other operands:
help!
-c

関連情報