我想编写一个Bash脚本,可以接收不同的参数。它应该像普通的Linux控制台程序一样使用:
my_bash_script -p 2 -l 5 -t 20
需要将数值2保存在名为“pages”的变量中,将参数l保存在名为“length”的变量中,将数值20保存在名为“time”的变量中。如何最好地实现这个功能?
我想编写一个Bash脚本,可以接收不同的参数。它应该像普通的Linux控制台程序一样使用:
my_bash_script -p 2 -l 5 -t 20
需要将数值2保存在名为“pages”的变量中,将参数l保存在名为“length”的变量中,将数值20保存在名为“time”的变量中。如何最好地实现这个功能?
使用内置的getopts
命令:
这里有一个教程
pages= length= time=
while getopts p:l:t: opt; do
case $opt in
p)
pages=$OPTARG
;;
l)
length=$OPTARG
;;
t)
time=$OPTARG
;;
esac
done
shift $((OPTIND - 1))
shift $((OPTIND - 1))
可以将命令行参数向左移动,这样你就可以访问脚本可能有的参数,例如 $1, $2, ...
getopt
和 getopts
... 你应该仔细阅读引述的内容(并请撤销你的负评)。你还可以在这里阅读更多信息:http://blog.onetechnical.com/2012/07/16/bash-getopt-versus-getopts/。 - tzelleke以下是类似的内容:
pages=
length=
time=
while test $# -gt 0
do
case $1 in
-p)
pages=$2
shift
;;
-l)
length=$2
shift
;;
-t)
time=$2
shift
;;
*)
echo >&2 "Invalid argument: $1"
;;
esac
shift
done
args+=("$1")
这样的事情;而在getopts中,OPTIND
的截止是硬性的。 - Charles Duffy
. myProgram -p2 -l 5 -t 20
)调用脚本,否则您设置的变量仅存在于“myProgram”中,而不是从中调用它的shell中。 - chepner