コマンドラインのようにスクリプトを実行する必要がある非常に長いbashスクリプトがあります。実行すると
./script.sh arg1 arg2 create
上記のように、 "arg1"と "arg2"で "create"文字列を渡すと、script.shの特定の機能を実行する必要があります(例:create_fn())。
上記のように
./script.sh arg1 add
文字列 "add" を渡して arg1 だけを渡すと、 --> create_add() 関数を実行する必要があります。
また、「cr」の後にTabを押すと、自動的に「create」/ad->addと書かなければなりません。
誰でも私を助けることができますか?
答え1
まず、本ホームページへようこそ。
あなたの質問に対する答えは、スクリプトに渡されたパラメータの一貫性によって異なります。
もし保証
- 「create」パラメーターは、合計3つのパラメーターがある場合にのみ使用されます。ここで、「arg1」と「arg2」は「create」の前にあります。
- 「add」パラメータは、合計2つのパラメータがある場合にのみ使用されます。ここで「arg1」は「add」の前にあります。
その後、スクリプトを呼び出した引数の総数を含む組み込みif
変数に対してスクリプト内で作業できます。$#
#!/bin/bash
if [[ "$#" == "3" && "$3" == "create" ]]
then
create_fn <possible arguments here>
elif [[ "$#" == "2" && "$2" == "add" ]]
then
create_add <possible arguments here>
fi
説明するには、if
テストでパラメータの数()$#
が3であることを確認します。そして3番目の引数($3
)は「作成」を実行して呼び出しますcreate_fn
(引数を使用して質問に必要かどうかを指定しなかった可能性があります)。または数値または引数が2で、2番目の引数が「add」の場合は、この場合を呼び出しますcreate_add
。
一方、コマンドライン引数の順序がランダムな場合は、よりスマートな引数処理ルーチンを実装する必要があります。選択項目のインポートあなたの友達になります。
シェルプログラミングの詳細については、以下を確認してください。高度なバッシュスクリプトガイド。
~について第二部あなたの質問:あなたが探している機能は「bash Complete」と呼ばれます。これは特にオートコンプリートを望んでいるので、マイナーなことではありません。コマンドラインパラメータ可能な値は、現在入力されているパラメータリストの場所とコマンドラインの前の項目によって異なります。これは可能ですが、マイナーではありません(例:Bashコマンドの完成をカスタマイズする方法は?)。
答え2
設定を少し変えて渡す必要があるようですgetops
。しかし、これらは必ず最初になければならず、1文字だけ可能です。一例:
#!/bin/bash
add=no
create=no
while getopts "ca" option ; do
case $option in
a) add=yes ;;
c) create=yes ;;
\?) echo 'Invalid option. Aborted.' ; exit ;;
esac
done
#shift argument numbers so that file1 is $1 etc.
shift $((OPTIND-1))
if [[ "$add" == "yes" ]] ; then
do_add_procedure
elif [[ "$create" == "yes" ]] ; then
do_create_procedure
else
do_neither
fi
if
- ステートメントの実行方法(たとえば、2つのステートメントに分割)によって、両方のオプションを提供して「create」と「add」を実行することもできます。ただし、bash
-scriptパラメータは〜しなければならないコマンドの先頭で、次の操作を行います。
./script.sh -a file1 file2