我正在编写此命令的shell脚本:

ovs-dump -i dpdkb2 [-d in] [-p tcp] [host 192.168.102.2][port 80] [-w /test.pcap]

对于'-w'选项,我想将'/test.pcap'处理为'$ PWD/test.pcap',因此我编写如下脚本:
for arg
do
    case $arg in
        -h | --help)
            ...
            ;;
        -w )
            echo "OPTARG=$OPTARG"
            ;;
        ?)
            ;;
    esac
done

如我们所见,我想通过'$ OPTARG'获取'/test.pcap',但是没有。所以我的问题是如何在脚本中获取“test.pcap”?

当我像这样使用“getopts”时:
while getopts "w:h:" arg
    do
        case $arg in
            -h | --help)
                ...
                ;;
            -w )
                echo "OPTARG=$OPTARG"
                ;;
            ?)
                ;;
        esac
    done

当我运行sh ovs-dump -w a.pcap时,出现错误:“/usr/local/share/openvswitch/scripts/gangyewei-ovs-dump:第68行:-w:未找到命令”。

而回显“OPTARG = $ OPTARG”的输出为“OPTARG =”。

这也行不通,我该怎么办?谢谢〜

最佳答案

您可以这样编写脚本:

OPTIND=-1   # rest OPTIND if it has been set earlier

# start getopts loop
while getopts "w:h:" arg; do
    case $arg in
        h | --help)
            ...
        ;;
        w)
            echo "OPTARG=$OPTARG"
        ;;
        ?)

        ;;
    esac;
done

然后将其运行为:
bash ./ovs-dump -w a.pcap

关于linux - 如何在Linux Shell命令参数中获取下一个参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44917687/

10-16 09:43