2

这是脚本:

file=$1
while getopts ":ivr" opt; do
case $opt in
i) iopt=1;;
v) vopt=1;;
r) ropt=1;;
\?)echo "invalid option: -$OPTARG" >
esac
done
shift $(($OPTIND-1))

所以我真正理解的唯一部分是 shift $(($OPTIND-1))。有人可以解释其余的实际在做什么吗?上面是什么意思file=$1?这是否意味着现在将“文件”一词分配给$1列的值?

通过“$1 列”,我指的是这样一个事实,即在运行命令时,$0分配给命令的实际名称,$1是给出的第二个选项/参数,并且$2是给出的第三个选项/参数。例如,如果您键入:

rm -r directory/randomfiles

然后$0是 rm。-r将是$1。并且directory/randomfiles会是$2。那有意义吗?

总结一下:

  1. file=$1顶部是什么意思,有什么意义?
  2. 代表什么$opt,它是什么意思?
  3. 这是什么iopt=1意思,它有什么意义?
  4. 如果我想像这样使用我的脚本: MyScriptName -r [InsertFilenameHere]我该怎么做?

我知道我在问很多问题-如果您能回答我的一些问题,或者指出我正确的方向,我将不胜感激!

提前致谢。

4

1 回答 1

3

您的命令最多可以使用 3 个命令行选项,-i, -r, -v。该getopts命令在循环中执行以解析选项。getopts 命令使用该opt变量来保存当前选项字符。在 case 命令中设置了一些变量来记住为脚本提供了哪些选项。

您对 的使用是正确的$1,但通常在选项转移之前您不会提取位置参数。

要做到这一点MyScriptName -r [InsertFilenameHere],你会这样做:

#!/bin/bash
ropt=0
while getopts :r opt; do
    case $opt in
        r) ropt=1;;
        ?) echo "illegal option: -$OPTARG"; exit 1;;
    esac
done
shift $((OPTIND-1))
file=$1
if [[ $ropt == 0 ]]; then
    echo "error: you did not specify '-r'"
    exit 1
fi
: do something with $file
于 2013-06-18T20:49:28.867 回答