3

getopts を適切に使用する方法や、引数で渡すことができるその他の手法の例を誰かに教えてもらえますか? これをunix shell/bashで書こうとしています。getopt と getopts があり、どちらを使用するのがよいかわかりません。最終的には、これを構築して、より多くのオプションを追加します。

この場合、ファイルパスを入力としてシェル スクリプトに渡し、正しく入力されなかった場合に備えて説明を配置します。

export TARGET_DIR="$filepath"

例: (コマンドラインで呼び出す)

./mytest.sh -d /home/dev/inputfiles

この方法で実行すると、エラー メッセージまたは正しい使用法を求めるプロンプトが表示されます。

./mytest.sh -d /home/dev/inputfiles/
4

2 に答える 2

6

ユーザーとして、ディレクトリ名の末尾にスラッシュを付けるとエラーが発生するプログラムに非常に悩まされます。必要に応じて削除できます。

非常に完全なエラーチェックを備えたシェルの例:

#!/bin/sh

usage () {
  echo "usage: $0 -d dir_name"
  echo any other helpful text
}

dirname=""
while getopts ":hd:" option; do
  case "$option" in
    d)  dirname="$OPTARG" ;;
    h)  # it's always useful to provide some help 
        usage
        exit 0 
        ;;
    :)  echo "Error: -$OPTARG requires an argument" 
        usage
        exit 1
        ;;
    ?)  echo "Error: unknown option -$OPTARG" 
        usage
        exit 1
        ;;
  esac
done    

if [ -z "$dirname" ]; then
  echo "Error: you must specify a directory name using -d"
  usage
  exit 1
fi

if [ ! -d "$dirname" ]; then
  echo "Error: the dir_name argument must be a directory
  exit 1
fi

# strip any trailing slash from the dir_name value
dirname="${dirname%/}"

getopts のドキュメントについては、bash のマニュアルを参照してください。

于 2011-07-26T19:25:33.390 に答える
0

「:)」行の修正:

:)  echo "Error: -$OPTARG requires an argument"

フラグの後に値が指定されていない場合、OPTARG がフラグの名前を取得し、フラグが「:」に設定されるため、上記のサンプルでは次のように出力されます。

Error: -: requires an argument

役に立たない情報でした。

同じことが当てはまります:

\?)  echo "Error: unknown option -$OPTARG"

このサンプルをありがとう!

于 2013-07-11T16:20:52.217 に答える