Bashシェルスクリプトにオプションを含める方法
ターミナルコマンドには通常、オプションまたはスイッチがあり、コマンドが実行する方法を変更するために使用できます。オプションは、コマンドラインインターフェイスのPOSIX仕様に含まれています。これは、初期のUNIXアプリケーションで確立された昔ながらの規則でもあるため、独自のコマンドを作成するときに、それらをBashスクリプトに含める方法を知っておくとよいでしょう。
ほとんどの言語と同様に、Bashのオプションの解析の問題を解決する方法はいくつかあります。今日まで、私のお気に入りの方法は、Patrick VolkerdingのSlackwareビルドスクリプトから学んだ方法です。これは、Linuxを最初に発見し、OSに付属のプレーンテキストファイルに挑戦したときにシェルスクリプトを紹介するのに役立ちました。
Bashでのオプション解析
Bashでオプションを解析するための戦略は、シェルスクリプトに渡されたすべての引数を循環し、それらがオプションであるかどうかを判断してから、次の引数にシフトすることです。オプションがなくなるまでこのプロセスを繰り返します。
単純なブールオプション(スイッチと呼ばれることもあります)から始めます またはフラグ ):
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
else
break
fi
done
echo $ALPHA
このコードでは、while
を作成します 処理する引数がなくなるまで無限ループとして機能するループ。 if
ステートメントは、最初の位置($1
)で見つかった引数と一致しようとします )--alpha
のいずれかに または-a
。 (これらは特別な意味を持たない任意のオプション名です。実際のスクリプトでは、--verbose
を使用できます。 および-v
詳細出力をトリガーします。
shift
キーワードを使用すると、すべての引数が1シフトし、2番目の引数($2
)になります。 )が位置1($1
)に移動します )。 else
処理する引数がなくなるとステートメントがトリガーされ、while
が壊れます。 ループ。
スクリプトの最後で、$ALPHA
の値 端末に印刷されます。
スクリプトをテストします:
$ bash ./test.sh --alpha
1
$ bash ./test.sh
$ bash ./test.sh -a
1
オプションが正しく検出されました。
Bashで引数を検出する
ただし、問題があります。余分な引数は無視されます。
$ bash ./test.sh --alpha foo
1
$
オプションとして意図されていない引数をキャッチするために、残りの引数をBash配列にダンプできます。
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
else
break
fi
done
echo $ALPHA
ARG=( "${@}" )
for i in ${ARG[@]}; do
echo $i
done
スクリプトの新しいバージョンをテストします:
$ bash ./test.sh --alpha foo
1
foo
$ bash ./test.sh foo
foo
$ bash ./test.sh --alpha foo bar
1
foo
bar
引数付きのオプション
一部のオプションでは、独自の引数が必要です。たとえば、ユーザーがグラフィックの色や解像度などの属性を設定したり、アプリケーションがカスタム構成ファイルを参照したりできるようにしたい場合があります。
これをBashに実装するには、shift
を使用できます。 キーワードはブールスイッチの場合と同じですが、引数を1ではなく2シフトします。
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
elif [ "$1" = "--config" -o "$1" = "-c" ]; then
CONFIG=$2
shift 2
else
break
fi
done
echo $ALPHA
echo $CONFIG
ARG=( "${@}" )
for i in ${ARG[@]}; do
echo $i
done
このコードでは、elif
を追加します 各引数を両方の--config
と比較する句 および-c
。一致した場合、CONFIG
と呼ばれる変数の値 2番目の引数の値に設定されます(これは、--config
を意味します オプションには引数が必要です)。 --config
をシフトするには、すべての引数の場所が2:1シフトします。 または-c
、および1を使用して、引数を移動します。いつものように、一致する引数がなくなるまでループが繰り返されます。
スクリプトの新しいバージョンのテストは次のとおりです。
$ bash ./test.sh --config my.conf foo bar
my.conf
foo
bar
$ bash ./test.sh -a --config my.conf baz
1
my.conf
baz
オプションの解析が簡単になりました
Bashでオプションを解析する方法は他にもあります。代わりにcase
を使用することもできます ステートメントまたはgetopt
指図。どちらを使用する場合でも、ユーザー向けのオプションはどのアプリケーションにとっても重要な機能であり、Bashを使用すると簡単に使用できます。
-
Windows 10にBash(Linuxシェル)をインストールして使用する方法[チュートリアル]
WindowsでLinuxシェルを設定して使用する方法は次のとおりです– Linux用Windowsサブシステムを使用します ( WSL 。 このチュートリアルは、2020年以降の最新バージョンのWindows10を対象としています。古いソフトウェアを使用するべきではないため、古いバージョンのWindows10でWSLを使用する方法やWindows8/7 / XP/3.1の他の方法については説明しません。 Windowsを使用する必要がある場合は、セキュリティパッチをまだ受けているバージョンを使用してください! WSL は優れたツールであり、Linuxを離れたことがないかのよ
-
Windows 10 に Linux Bash シェルをインストールする方法
Bash Shell は、非常に長い間 Linux の一部であった単純なコマンドライン ユーティリティであり、現在、Microsoft はそれを Windows 10 に直接追加しています。これは、仮想マシンでも、コンテナーでも、Windows 用にコンパイルされたソフトウェアでもありません。代わりに、Linux ソフトウェアを実行するための完全な Windows サブシステムであり、Windows で Android アプリを実行するための Microsoft の廃止された Project Astoria に基づいています。 これで、デュアルモード オペレーティング システムとは何かがわか