有人能用简单的英语解释这个短的getopts bash脚本吗? (UNIX)

时间:2013-06-18 20:29:51

标签: bash unix scripting sh getopts

这是剧本:

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))

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

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

rm -r directory/randomfiles

然后$0将是rm。 -r将是$1directory/randomfiles将为$2。这有意义吗?

总结:

  1. 顶部的file=$1是什么意思,最重要的是什么?
  2. $opt代表什么,它意味着什么?
  3. iopt=1是什么意思,是什么意思呢?
  4. 如果我想像这样使用我的脚本: MyScriptName -r [InsertFilenameHere]我该怎么做呢?
  5. 我知道我要问的是 - 如果你能回答我的一些问题,或者指出我正确的方向,我会非常感激!

    提前致谢。

1 个答案:

答案 0 :(得分:3)

您的命令最多可以使用3个命令行选项,-i-r-vgetopts命令在循环中执行以解析选项。 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