我已经编写了一个用于在android上配置SSH daemom等的长bash脚本。问题是,它已经太长了有时其他用户或我可能只想配置脚本必须提供的某些方面。每次运行时都不必遍历整个脚本,我想添加一些选项来指示将要运行的内容,但是当没有指定任何内容时仍然能够运行脚本。
类似的东西:
myscript -d -o -p
或者
myscript -dop
可以找到脚本here。我觉得这里发布的时间太长了。
基本上它分成了5个这样的区块:
#!/system/xbin/bash
echo "---SECTION-ONE---"
read
if test then
while true
do
我抬头使用了getopts并且不能完全包围它,但是没有一个与我正在做的事情相匹配的例子。这就是我在这里发帖的原因;)一如既往地感谢任何一次进攻。
答案 0 :(得分:2)
您可以将脚本的不同主体分解为可在存在选项时调用的函数。
#!/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
循环,否则运行所有内容。
答案 1 :(得分:1)
以下是这些选项的示例,但如果有更多信息,我会进行编辑。这假设参数不带任何变量文本:
#!/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