編集できない次のbashスクリプトがあります(多すぎます)。
#! /bin/bash/
#filename: testbash
# User specific aliases and functions
test="test1"
echo $test
テスト変数の変更中にtestbashをソースとして実行できますか?つまり:
>> . testbash
test1
>> . testbash -someargument(test="newtest")
newtest
答え1
問題を完全に理解したかどうかはわかりませんが、これがあなたが望むものだと思います。
はい
[root@HomeTraining ~]$ cat example
#!/bin/bash
VAR1=$1
echo "$VAR1"
ここで、$ 1はコマンドの最初のパラメータです。
[root@HomeTraining ~]$ . example New_Text
New_Text
欲しいものがたくさんできると思います。
#!/bin/bash
VAR1=$1
VAR2=$2
echo "$VAR1 $VAR2"
$ . example one two
one two
答え2
現在のスクリプトがどのように書かれているか(無条件文字列を変数に割り当てて印刷する)ことを考えると、スクリプトにnotの別の値を表示させることはできません$test
。スクリプトを入手することは役に立ちません。 getスクリプトが実行する唯一のことは、以前の値に関係なく、変数を現在の環境の値に設定することです。test1
test1
test
test1
スクリプトにデフォルトこれは、スクリプトにコマンドライン引数を提供することでオーバーライドできます。
最も簡単な場合は次のようになります。
#!/bin/sh
value=${1:-test1}
printf 'value is %s\n' "$value"
変数名はtest
標準ユーティリティの名前でもあるため、使用を避けました。問題を引き起こすわけではありませんが、コードを読みやすくします。スクリプトは特定の機能を使用しないため、 - 行でも/bin/sh
代わりに使用しています。ただし、、、およびその他のPOSIXシェルを介してまだ実行できます。bash
#!
bash
bash
ksh
yash
zsh
これは変数の値をvalue
最初のコマンドライン引数の値に設定します。ただし、何も提供されない限り文字列に設定されますtest1
。これは空の文字列であるか、変数が設定されていない場合に拡張される標準パラメータの置換です${parameter:-word}
。word
$parameter
テスト:
$ ./script.sh
value is test1
$ ./script.sh hello
value is hello
スクリプトが-v
単一のオプション引数を取るオプションを取ることができるようにします。
#!/bin/sh
value=test1
while getopts 'v:' opt; do
case $opt in
v) value=$OPTARG ;;
*) echo 'error in command line parsing' >&2
exit 1
esac
done
# not needed if you're not expecting operands after the options
# on the command line:
shift "$(( OPTIND - 1 ))"
printf 'value is %s\n' "$value"
最後のスクリプトをテストします。
$ ./script.sh
value is test1
$ ./script.sh -v hello
value is hello