シェルスクリプトは、コマンドプロンプトで実行されたかのようにコマンドを実行することを知っています。関数のようにシェルスクリプトを実行できるようにしたいです。つまり、スクリプトに入力値または文字列を入れることです。どうすればいいですか?
答え1
シェルコマンドとコマンドのすべての引数は、次のように表示されます。番号付きシェル変数:またはその他など、$0
コマンド自体を含む文字列値。すべてのパラメータは、などで表されます。引数の数はシェル変数にあります。script
./script
/home/user/bin/script
"$1"
"$2"
"$3"
"$#"
この問題を処理する一般的な方法は、シェルコマンドgetopts
とCライブラリ関数とshift
非常によく似ています。 to、toなどの値を移動します。コードは最終的にa...値を見て何をするかを決定し、aを実行して次の引数に移動します。おそらく確認が必要です。getopts
getopt()
shift
$2
$1
$3
$2
$#
"$1"
case
esac
shift
$1
$1
$#
答え2
パラメータ番号 - を使用して$n
渡されたパラメータにアクセスできます。他のコマンドと同様に、パラメーターを渡すことができます。n
1, 2, 3, ...
$ cat myscript
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"
$ ./myscript hello world
First arg: hello
Second arg: world
答え3
Bashスクリプトでは、個人的に次のスクリプトを使用してパラメータを設定するのが好きです。
#!/bin/bash
helpFunction()
{
echo ""
echo "Usage: $0 -a parameterA -b parameterB -c parameterC"
echo -e "\t-a Description of what is parameterA"
echo -e "\t-b Description of what is parameterB"
echo -e "\t-c Description of what is parameterC"
exit 1 # Exit script after printing help
}
while getopts "a:b:c:" opt
do
case "$opt" in
a ) parameterA="$OPTARG" ;;
b ) parameterB="$OPTARG" ;;
c ) parameterC="$OPTARG" ;;
? ) helpFunction ;; # Print helpFunction in case parameter is non-existent
esac
done
# Print helpFunction in case parameters are empty
if [ -z "$parameterA" ] || [ -z "$parameterB" ] || [ -z "$parameterC" ]
then
echo "Some or all of the parameters are empty";
helpFunction
fi
# Begin script in case all parameters are correct
echo "$parameterA"
echo "$parameterB"
echo "$parameterC"
この構造は各パラメータのキー文字を定義するため、パラメータの順序に依存しません。また、パラメータが誤って定義されるたびにヘルパー関数が印刷されます。処理する必要があるさまざまなパラメータを持つスクリプトが多い場合に非常に便利です。仕組みは次のとおりです。
$ bash myscript -a "String A" -b "String B" -c "String C"
String A
String B
String C
$ bash myscript -a "String A" -c "String C" -b "String B"
String A
String B
String C
$ bash myscript -a "String A" -c "String C" -f "Non-existent parameter"
myscript: illegal option -- f
Usage: myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
$ bash myscript -a "String A" -c "String C"
Some or all of the parameters are empty
Usage: myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
答え4
$/shellscriptname.sh argument1 argument2 argument3
また、あるシェルスクリプトの出力を別のシェルスクリプトにパラメータとして渡すこともできます。
$/shellscriptname.sh "$(secondshellscriptname.sh)"
シェルスクリプトでは、$1
最初のパラメータ、$2
2番目のパラメータなどの数値を使用してパラメータにアクセスできます。