2013-06-18 42 views
2

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

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将是$1。和directory/randomfiles将是$2。那有意义吗?

总结:

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

我知道我在问一吨 - 如果你能回答我的一些问题,或者指出我的方向正确,我会非常感激!

在此先感谢。

+0

+1指定的纯英文部分,否则会有人使用POSIX :) – nsd

回答

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 
+0

谢谢你们说了!非常感激 – DeaIss

相关问题