2

スクリプトの使用例

./foo.sh -v -r /home/ -s /home/user/file
./foo.sh -r /home/ -s /home/user/file

パラメーターには、スキャンするファイルまたはフォルダーと、データベース用のファイル (-s データベース ファイル) が常に必要です。

foo.sh内

function entrance()
{
while getopts "v:r:s" opt; do
  case $opt in
    v)
      echo "-v was triggered, Verbose mode" >&2
      ;;
    r)
      echo "-r was triggered, recursive mode: $OPTARG" >&2
      ;;
    s)
      echo "-s was triggered, DATABASE: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done
}

なぜうまくいかないのかわかりません。

私を直してください。

ありがとう

4

1 に答える 1

2

関数を呼び出しているときに、おそらく $@ を忘れていたでしょう。これを参照してください:

#!/bin/bash

function entrance() {
while getopts "v:r:s" opt; do
  case $opt in
    v)
      echo "-v was triggered, Verbose mode" >&2
      ;;
    r)
      echo "-r was triggered, recursive mode: $OPTARG" >&2
      ;;
    s)
      echo "-s was triggered, DATABASE: $OPTARG" >&2
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done
}

entrance "$@"

そしていくつかの説明:ボーンシェルのユーザー定義関数内でgetoptsを使用する

于 2012-11-04T21:39:57.260 に答える