不是预期的脚本输出

时间:2016-04-18 05:27:36

标签: linux bash

当我使用./getopts -a这样的参数运行此代码时,它会打印“hi -a",但预期输出会为"hi hello"。任何想法都会出错?

 #!/bin/bash

while getopts a:name
do
        case $name in
          a)aopt=$OPTARG;;
          *)echo "Invalid arg";;
        esac
done

if [[ ! -z $aopt ]]; then
    echo $aopt
fi

shift $(($OPTIND - 1))

#exit 0

2 个答案:

答案 0 :(得分:0)

可能是你缺少引号和空格:

    while getopts "a:" name; do
        echo "name=$name";
        case $name in
            a)aopt=$OPTARG;;
            *)echo "Invalid arg";;
        esac
    done
    if [[ ! -z $aopt ]]; then
        echo $aopt
    fi
    shift $(($OPTIND - 1))

通过命令执行:

    ./myCode"嗨你好"

答案 1 :(得分:0)

看起来与-a选项绑定的唯一问题是hi。如果您只需要将hello-a hi一起提取,则可以使用$ 3从命令行中提取它。

while getopts "a:" name; do
            case $name in
                a)aopt=$OPTARG;;
                *)echo "Invalid arg";;
            esac
        done
        if [[ ! -z $aopt ]]; then
            echo "$aopt $3"
        fi
        shift $(($OPTIND - 1))

请注意""你需要回应什么。我建议你看看http://www.bahmanm.com/blogs/command-line-options-how-to-parse-in-bash-using-getopt,快速了解一下getopt。