什么是回到脚本开头的最佳方法?

时间:2015-02-11 00:31:00

标签: bash recursion

我有一个带有几个输入的脚本,脚本最终会启动下载,一旦下载完成,我想提示用户如果要下载其他内容则启动该过程。

while true;do
    read -p "Is this correct? (yes/no/abort) " yno
    case $yno in
        [Yy]*) break;;
        [Nn]*) echo "Lets Start Over" 'restart script code goes here';;
        [Aa]*) exit 0;;
            *) echo "Try again";;

    esac
done

echo
echo "Starting $build download for $opt1 from Jenkins"
echo

while true;do
    read -p "Do you want to download something else? " yesno
    case $yesno in
        [Yy]* ) 'restart script code goes here';;
        [Nn]* ) break;;
        * ) echo "Try Again "
    esac
done

2 个答案:

答案 0 :(得分:3)

如果使用shell函数设计shell脚本,重复一段代码会更容易:

main() {
    while true; do
        next
        if ! validate_opt 'Do you want to download something else?'; then
            break
        fi
    done
}
validate_opt() {
    local PS3="$1 (Press ctrl-c to exit) "
    local choice
    select choice in yes no; do
        # This can be written more tersely,
        # but for clarity...
        case $choice in
            yes) return 0;;
             no) return 1;;
        esac
    done
}
do_download() {
    echo
    echo "Starting $build download for $opt1 from Jenkins"
    echo
    fetch "$1" # or whatever
}
next() {
    if validate_opt 'Is this correct?'; then
        do_download "$opt"
    else
        echo "Let's start over"
    fi
}
main

答案 1 :(得分:1)

function stage1 {
while true;do
    read -p "Is this correct? (yes/no/abort) " yno
    case $yno in
        [Yy]*) stage2;;
        [Nn]*) continue;;
        [Aa]*) exit 0;;
            *) echo "Try again";;

    esac
done
}

function stage2 {
echo
echo "Starting $build download for $opt1 from Jenkins"
echo

while true;do
    read -p "Do you want to download something else? " yesno
    case $yesno in
        [Yy]* ) stage1;;
        [Nn]* ) exit 0;;
        * ) echo "Try Again ";;
    esac
done

}
stage1

您可以使用功能

执行此操作

第一个功能是第1阶段和第二阶段2 列出所有函数后,在文件的底部我们调用stage1。 当函数stage1执行$yno= Y* or y*时,它将跳到stage2函数,反之亦然,当我们在stage2中时

相关问题