シェルコードはほとんど書かれていませんが、コードを呼び出すときに変数を変更する必要があります。これを行う方法
はい
./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_a
をvar_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