BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

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を使用すると簡単に使用できます。


  1. Windows 10にBash(Linuxシェル)をインストールして使用する方法[チュートリアル]

    WindowsでLinuxシェルを設定して使用する方法は次のとおりです– Linux用Windowsサブシステムを使用します ( WSL 。 このチュートリアルは、2020年以降の最新バージョンのWindows10を対象としています。古いソフトウェアを使用するべきではないため、古いバージョンのWindows10でWSLを使用する方法やWindows8/7 / XP/3.1の他の方法については説明しません。 Windowsを使用する必要がある場合は、セキュリティパッチをまだ受けているバージョンを使用してください! WSL は優れたツールであり、Linuxを離れたことがないかのよ

  2. Windows 10 に Linux Bash シェルをインストールする方法

    Bash Shell は、非常に長い間 Linux の一部であった単純なコマンドライン ユーティリティであり、現在、Microsoft はそれを Windows 10 に直接追加しています。これは、仮想マシンでも、コンテナーでも、Windows 用にコンパイルされたソフトウェアでもありません。代わりに、Linux ソフトウェアを実行するための完全な Windows サブシステムであり、Windows で Android アプリを実行するための Microsoft の廃止された Project Astoria に基づいています。 これで、デュアルモード オペレーティング システムとは何かがわか