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 "$@"

还有一些解释:在 bourne shell 的用户定义函数中使用 getopts

于 2012-11-04T21:39:57.260 回答