shell脚本传递参数的子集

时间:2010-03-26 00:59:06

标签: shell unix

从包装shell脚本我调用Java程序。我希望Unix shell脚本将所有参数传递给java程序,除了 EMAIL论点。我如何删除EMAIL参数并将其余参数传递给java程序。 EMAIL论点可以在任何位置出现。

valArgs()
{

    until [ $# -eq 0 ]; do
        case $1 in
            -EMAIL)
                MAILFLAG=Y
                shift
                break
                ;;
        esac
    done
}



main()

{

 valArgs "$@"

 $JAVA_HOME/bin/java -d64  -jar WEB-INF/lib/test.jar "$@"

2 个答案:

答案 0 :(得分:1)

只是删除“-EMAIL”选项吧?我认为在“-EMAIL”

之后没有额外的参数
main(){
 args="$1"
 case "$1" in
    *-EMAIL*)
       args=${args/-EMAIL/}
 esac
 $JAVA_HOME/bin/java -d64  -jar WEB-INF/lib/test.jar "$args"
}

答案 1 :(得分:1)

如果您使用的是bash,则可以使用以下代码段。如果位置参数中有空格,则使用数组有助于解决可能出现的问题。

请记住,原始示例中传递的位置参数仅在valArgs()调用期间持续存在。


#!/bin/bash

main()
{
    # Build up arg[] array with all options to be passed
    # to subcommand.
    i=0

    for opt in "$@"; do
        case "$opt" in
        -EMAIL)
            MAILFLAG=Y
            ;;
        *)
            arg[i]="$opt"
            i=$((i+1))
            ;;
        esac
    done

    $JAVA_HOME/bin/java -d64  -jar WEB-INF/lib/test.jar "${arg[@]}"
}

main "$@"