Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在运行时传递参数时,使用getopt运行脚本的特定部分_Android_Bash_Shell_Getopt_Getopts - Fatal编程技术网

Android 在运行时传递参数时,使用getopt运行脚本的特定部分

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

我已经编写了一个很长的bash脚本,用于在android上配置SSH daemom等。问题是,它太长了&有时其他用户或我可能只想配置脚本提供的某些方面。与每次运行整个脚本不同,我想添加一些选项,指定要运行的内容,但在未指定任何内容的情况下仍然能够整个运行脚本

比如:

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