0

我正在编写一个可以选择文件并打印特定内容的脚本。例如,

san#./script.sh

Expected Usage : ./script.sh --file1 --dns

(这里它检查file1,搜索dns名称并打印。基本上一个参数下有子参数)

我尝试了单个参数/选项,如下所示:

options=$@

arguments=($options)

index=0;
for argument in $options
do
    index=`expr $index + 1`;
    case $argument in
    -a | --fun1 ) run_function1 ;;
    -b | --fun2 ) run_function2 ;;
    -c | --fun3 ) run_function3 ;;
    esac
done
exit;

[ ${1} ] || helpinfo

有人可以建议双参数(子选项)吗?

预期目标选项:

./script.sh


OPTIONS : ./script.sh -h

./script --fun1 stackoverflow
        microsoft
        Google
     --fun2 Yahoo 

基本上每个函数都会查看一个文件。我已经研究过 getopt 或 getopts,但它没有长选项(--long不可能,我们只能使用-l)。但再次不确定子参数。有人可以帮忙吗?

4

2 回答 2

1

我不确定我是否正确理解你......但让我们试试我的运气:)

$ cat a.sh
#!/bin/bash

function fun1 {
   echo "fun1 '$1'"
}

function fun2 {
   echo "fun2 '$1'"
}

function err {
   echo "No function has been specified"
   exit 1
}

FUNCTION=err
while [ $# -gt 0 ]; do
   case "$1" in
      -a | --fun1 ) FUNCTION=fun1 ;;
      -b | --fun2 ) FUNCTION=fun2 ;;
      *) $FUNCTION "$1" ;;
   esac
   shift
done

$ ./a.sh --fun1 one two -b three
fun1 'one'
fun1 'two'
fun2 'three'
于 2013-05-10T20:43:43.383 回答
0

有一个处理参数解析的详细常见问题解答(包括您所谓的“子选项”): http: //mywiki.wooledge.org/BashFAQ/035

于 2013-05-03T17:17:51.760 回答