脚本用法示例
./myscript --p 1984 --n someName
#!/bin/bash
while getopts :npr opt
do
case $opt in
n ) echo name= ??? ;;
p ) echo port= ??? ;;
r ) echo robot= "Something" ;;
? ) echo "Useage: -p [#]" ;;
esac
done
如何在命令选项后访问参数?
此外,如果我输入:./myscript --p 1985
我想知道如何回复1985年并使用该论点。
答案 0 :(得分:3)
在bash中,请参阅help getopts
:“当一个选项需要参数时,getopts将该参数放入shell变量 OPTARG 。”
usage() { echo "Usage: $(basename $0) -n name -p port -r"; exit; }
while getopts :n:p:r opt # don't forget the colons for opts that take an arg
do
case $opt in
n ) name="$OPTARG" ;;
p ) port="$OPTARG" ;;
r ) robot=chicken ;;
? ) usage ;;
esac
done
shift $(( OPTIND - 1 ))
echo "the name is $name"
echo "the port is $port"
我相信你可以谷歌寻找解决方案来解析bash中的选项。这是几分钟的努力:
#!/bin/bash
usage() { echo foo; exit; }
while [[ $1 == -* ]]; do
case "$1" in
--) shift 1; break ;;
-p|--p|--port) port="$2"; shift 2;;
-n|--n|--name) name="$2"; shift 2;;
*) echo "unknown option: $1"; usage;;
esac
done
echo "the name is $name"
echo "the port is $port"
echo "the rest of the args are:"; ( IFS=,; echo "$*" )
进行测试,
$ bash longopts.sh --port 1234 --bar a b c
unknown option: --bar
foo
$ bash longopts.sh --port 1234 a b c
the name is
the port is 1234
the rest of the args are:
a,b,c