1

私は3つの引数を取るシェルプログラムを書いています:

  • プログラムの機能を決定する整数
  • プログラムで使用されるファイル

コマンドの形式はmyProgramnumファイルです。ただし、コマンドに0、1、または3つ以上の引数しかない場合は、プログラムにエラーを出力させたいと思います。つまり、「myProgram」、「myProgram num」、または「myProgram num file anotherWord」と入力すると、画面にエラーが出力されます。これを既存のコードに実装する方法を知っている人はいますか?

4

4 に答える 4

1

bashでは、整数を使用する場合、(( )) より直感的です。

#!/bin/bash

if (($# < 2)); then
    printf >&2 "There's less than 2 arguments\n"
    exit 1
fi

if (($# > 2)); then
    printf >&2 "There's more than 2 arguments\n"
    exit 1
fi

if ! (($1)); then
    printf >&2 "First argument must be a positive integer\n"
    exit 1
fi

if [[ ! -f "$2" ]]; then
    printf >&2 "Second argument must be an exited file\n"
    exit 1
fi

# -->the rest of the script here<--

さらに、ベストプラクティスと適切なコーディングを尊重するために、エラーを印刷するときは、STDERR私が行うのと同じようにする必要がありますprintf >&2

于 2012-10-09T01:44:29.347 に答える
0

$#に組み込まれているシェルを使用して、スクリプトに渡される引数の数を決定します。プログラム名はカウントされません。

于 2012-10-09T01:10:27.250 に答える
0

組み込み変数$#には、スクリプトに渡された引数の数が含まれています。これを使用して、次のような十分な引数があるかどうかを確認します。

#!/bin/bash

if [ $# -ne 2 ]; then
    echo "Usage: myProgram num file" >&2
    exit 1
fi

# The rest of your script.
于 2012-10-09T01:11:17.117 に答える
0

bashを使用している場合は、次のようにアプローチできます。

#!/bin/bash
if [ $# -lt 2 ] || [ $# -gt 3 ]
then
  echo "You did not provide the correct parameters"
  echo "Usage: blah blah blah"
fi

これは非常に簡単なチェックです。コマンドラインパラメータを評価するときにはるかに強力なgetopt処理のマニュアルページを確認することもできます。

よくなって

于 2012-10-09T01:15:09.357 に答える