I’m writing a shell script of this command:
ovs-dump -i dpdkb2 [-d in] [-p tcp] [host 192.168.102.2][port 80] [-w /test.pcap]
For ‘-w’ options, I want to process ‘/test.pcap’ into ‘$PWD/test.pcap’, so I write script like this:
for arg do case $arg in -h | --help) ... ;; -w ) echo "OPTARG=$OPTARG" ;; ?) ;; esac done
As we see, I want to get ‘/test.pcap’ by ‘$OPTARG’, but is none. So my question is how to get ‘test.pcap’ in my script?
When I use ‘getopts’ like this:
while getopts "w:h:" arg do case $arg in -h | --help) ... ;; -w ) echo "OPTARG=$OPTARG" ;; ?) ;; esac done
When I run sh ovs-dump -w a.pcap
, I got error: ‘/usr/local/share/openvswitch/scripts/gangyewei-ovs-dump: line 68: -w: command not found’.
And the output of ‘echo “OPTARG=$OPTARG”‘ is ‘OPTARG=’.
It’s also not work, what should I do? Thank you~
Advertisement
Answer
You can have your script as this:
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
Then run it as:
bash ./ovs-dump -w a.pcap