命令行参数与case语句参数

时间:2013-10-15 15:51:10

标签: shell awk command-line-arguments

我正在尝试执行命令,但我需要获取命令行参数。这是我的问题:

这是代码:

pl_function(){
 node=$(echo "$1" | awk -F'\.' '{print $2}')
 echo $node
}

我有一个案例陈述:

case "$1" in -pl.*)
 pl_function
  ;;
esac

当我运行它时,它会打印一个空白。

另外,我想包括getopts,以便不关心参数的顺序。假设我有-location后跟一个参数,-grep后跟参数和-def_location后跟无参数。

在这种情况下如何使用getopts

2 个答案:

答案 0 :(得分:2)

在函数$1中,$2等是函数的参数。调用函数时,需要显式传递脚本$1

case "$1" in -pl.*)
 pl_function "$1"
  ;;

另外,你可以使用一些shell脚本魔术来进行字符串拆分而不是调用awk:

node=${1#*.}    # `#*.' removes a substring matching `*.' from the
                # front of $1

答案 1 :(得分:1)

  

当我运行它时,它会打印一个空白。

,因为您没有将任何参数传递给期望的函数。用

替换你的函数调用
my_function "$1"

此外,由@fedorqui提出的pointed不会将reserved words用于变量/函数名称。