Android 在运行时传递参数时,使用getopt运行脚本的特定部分
我已经编写了一个很长的bash脚本,用于在android上配置SSH daemom等。问题是,它太长了&有时其他用户或我可能只想配置脚本提供的某些方面。与每次运行整个脚本不同,我想添加一些选项,指定要运行的内容,但在未指定任何内容的情况下仍然能够整个运行脚本 比如:Android 在运行时传递参数时,使用getopt运行脚本的特定部分,android,bash,shell,getopt,getopts,Android,Bash,Shell,Getopt,Getopts,我已经编写了一个很长的bash脚本,用于在android上配置SSH daemom等。问题是,它太长了&有时其他用户或我可能只想配置脚本提供的某些方面。与每次运行整个脚本不同,我想添加一些选项,指定要运行的内容,但在未指定任何内容的情况下仍然能够整个运行脚本 比如: myscript -d -o -p 或 可以找到脚本。我认为它太长了,不能在这里发布 基本上,它被分成5个街区,如下所示: #!/system/xbin/bash echo "---SECTION-ONE---" read i
myscript -d -o -p
或
可以找到脚本。我认为它太长了,不能在这里发布
基本上,它被分成5个街区,如下所示:
#!/system/xbin/bash
echo "---SECTION-ONE---"
read
if test then
while true
do
我使用getopts进行查找,但如果没有一个与我正在做的工作相匹配的示例,我还不能完全理解它。这就是我在这里发帖的原因;)一如既往地感谢您的输入。这里是一个带有这些选项的示例,但如果有更多信息,我将进行编辑。这假设参数不接受任何变量文本:
#!/bin/bash
usage() {
echo "$0 [-d] [-o] [-p]"
exit 1
}
d=false o=false p=false
while getopts "dop" option; do
case "${option}" in
d)
d=true
;;
o)
o=true
;;
p)
p=true
;;
*)
usage
;;
esac
done
echo "d = $d"
echo "o = $o"
echo "p = $p"
用法示例:
$ ./test.sh -dop
d = true
o = true
p = true
$ ./test.sh -d -o -p
d = true
o = true
p = true
$ ./test.sh -d
d = true
o = false
p = false
您可以将变量值设置为要测试的任何对象,例如:
if [ "$d" == "true" ]; then
# do something
else
# do something else
fi
您可以将脚本的不同主体分解为在存在选项时可以调用的函数
#!/bin/bash
printing_stuff (){
echo "---SECTION-ONE---"
}
test_input (){
read -p "Enter something: " input
if [[ $input == something ]]; then
echo "test successful"
# do some stuff
fi
}
body_loop (){
while true; do
echo "this is the loop"
# some stuff
break
done
}
if [[ $@ ]]; then
while getopts "dop" opt; do
case $opt in
d)
printing_stuff
;;
o)
test_input
;;
p)
body_loop
;;
\?)
;;
esac
done
else
printing_stuff
test_input
body_loop
fi
如果脚本的参数存在,则执行
[[$@]]
测试仅运行getopts
循环,否则运行所有操作。请参阅a和an。-d-o-p
选项应该做什么?如果你编辑问题,让它更清楚你想做什么,以及到目前为止你尝试了什么,我们将为您提供更多帮助。此外,您还可以通过查看$0
,通过检测调用脚本的名称,为您的脚本创建一些符号链接,并执行不同的操作。如果可能,您可以向我展示符号链接方法,以便我可以学习其他操作方法吗?很抱歉,我花了这么长时间才回复,互联网已经成为我的稀缺商品。谢谢你的回答,约翰,这正是我所需要的。抱歉,回复时间太长。。。感谢你,我的最终产品。
#!/bin/bash
printing_stuff (){
echo "---SECTION-ONE---"
}
test_input (){
read -p "Enter something: " input
if [[ $input == something ]]; then
echo "test successful"
# do some stuff
fi
}
body_loop (){
while true; do
echo "this is the loop"
# some stuff
break
done
}
if [[ $@ ]]; then
while getopts "dop" opt; do
case $opt in
d)
printing_stuff
;;
o)
test_input
;;
p)
body_loop
;;
\?)
;;
esac
done
else
printing_stuff
test_input
body_loop
fi