bash:获取目录参数

时间:2012-03-25 11:29:15

标签: bash

我正在编写一个使用调用语法

的bash脚本

script [options] [dir]

要检索选项集并解析它们,我使用getopts。但是我怎么能得到dir的论点呢?一般来说,如果我将最后一个参数检索为$ {@:$ {#@}},则它不一定是dir,它仍然是一个选项或它的值。

我用于getopts的代码:

DIR="."
RECURSIVE=
FILTER=
while getopts “hnf:” OPTION
do
case $OPTION in
    h)
        usage
        exit 1
        ;;
    n)
        RECURSIVE="-maxdepth 1"
        ;;
    f)
        FILTER=$OPTARG
        ;;
    \?)
         exit 1
         ;;
    :)
         exit 1
         ;;
esac
done

你能帮忙吗?

2 个答案:

答案 0 :(得分:2)

OPTIND存储已处理参数的位置。循环后执行:

shift $((OPTIND-1))

现在目录位于$@,第一个目录位于$1

答案 1 :(得分:0)

DIR=
RECURSIVE=
FILTER=
while getopts ':hnf:' OPTION ;do
  case $OPTION in
    h)  usage; exit 1 ;;
    n)  RECURSIVE="-maxdepth 1" ;;
    f)  FILTER=$OPTARG ;;
    *)  echo "ERROR: invalid opion: -$OPTARG" 1>&2; exit 1 ;;
  esac
done
# remove the options from the positional parameters
shift $((OPTIND-1))
DIR="$1"
echo "FILTER=$FILTER"
echo "DIR=$DIR"

命令行示例

script -n -f 'my.*filter' 'my/directory'  

示例输出

FILTER=my.*filter
DIR=my/directory