4

我是shell脚本的菜鸟,我想知道这个:

#!/usr/local/bin/bash
number=5
echo "Enter 'yes' to continue, 'no' to abort:"
read choice
if [ $choice = yes ]; then
        while [ $number -lt 10 ]; do
                echo "The script is now looping!"
        done
elif [ $choice = no ]; then
        echo "Loop aborted"
else
        echo "Please say 'yes' or 'no'"
        read choice
# What now?
fi

如果您未指定“是”或“否”,我将如何处理 if 语句重新检查您的 $choice(第 13 行)?

谢谢你。

4

2 回答 2

2
  1. 您可以将代码从“echo Enter ...”放到外部“while”循环中。while 循环将循环直到 $choice 为“yes”或“no”。在执行此操作时删除最后一个“else”子句(这将是多余的)。

  2. PS您需要在内部while循环中增加(或更改) $number 。否则,它将无限运行。

于 2012-11-18T02:21:17.963 回答
2

您可以跟踪是否在一个名为的变量中循环invalid_choice

invalid_choice=true
while $invalid_choice; do
    read choice
    if [ "$choice" = "yes" ]; then
        invalid_choice=false
        ...
    elif [ "$choice" = "no" ]; then
        invalid_choice=false
        ...
    else
        echo "Please say yes or no"
done

或者,如果您需要大量执行此操作,您可以将其概括为一个函数:

function confirm() {
    local ACTION="$1"
    read -p "$ACTION (y/n)? " -n 1 -r -t 10 REPLY
    echo ""
    case "$REPLY" in
        y|Y ) return 0 ;;
        *   ) return 1 ;;
    esac
}

confirm "Do something dangerous" || exit
于 2012-11-18T02:22:55.557 回答