Bash中的命令行参数
我想写一个接受不同参数的bash脚本。它应该像普通的linux控制台程序一样使用:Bash中的命令行参数,bash,command-line-arguments,Bash,Command Line Arguments,我想写一个接受不同参数的bash脚本。它应该像普通的linux控制台程序一样使用: my_bash_script -p 2 -l 5 -t 20 因此,值2应保存在名为pages的变量中,参数l应保存在名为length的变量中,值20应保存在变量time中 最好的方法是什么?类似于 pages= length= time= while test $# -gt 0 do case $1 in -p) pages=$2 sh
my_bash_script -p 2 -l 5 -t 20
因此,值2应保存在名为pages的变量中,参数l应保存在名为length的变量中,值20应保存在变量time中
最好的方法是什么?类似于
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
使用
getopts
builtin:shift$((OPTIND-1))
移动命令行参数,以便您可以访问脚本的可能参数,即$1,$2,…
什么中的变量?参数与正在运行的程序相关,在本例中与bash无关。“myProgramm”是否接受参数?我想在bash中编写一个执行此操作的程序。请注意,除非使用“.”(.myProgram-p2-l 5-t 20
)调用脚本,否则设置的变量将只存在于myProgram
中,不是你称之为shell的shell。在我看来,他的意图是myProgramm是一个bash脚本。在这种情况下,getopts是正确的。为了避免这种混淆,也许我的程序应该称为my_bash_脚本。嘿,见鬼,我会编辑它“getopt无法处理空参数字符串或带有嵌入空格的参数。请忘记它曾经存在。”@Federico你的困惑getopt
和getopts
。。。你应该仔细阅读你的引文(请撤回否决票)。您还可以阅读-1,使用起来更好getopts@StevenMackenzie,…我不确定我是否同意。如果您看一下,手动解析示例(这是进一步的简化)做了许多getopts无法做的事情。因此,遵循这种做法更为灵活。@StevenMackenzie,……我们所处的世界中,人们也被GNUISM所宠坏,比如能够混合使用可选参数和位置参数(除非使用--
明确地表示前者的结束和后者的开始)。在默认情况下,使用此类解析器可以轻松地执行类似于args+=(“$1”)
的操作;对于getopts,在OPTIND
处的截止是非常困难的。Bash常见问题35(如上)告诉了我需要知道的一切
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))