运行上一个命令,直到答案为“否”

运行上一个命令,直到答案为“否”

我一直在尝试编写一个脚本来询问用户是否应该再次运行该命令。

如果答案是肯定的,那么它应该再次执行最后一个命令。即使在第二次执行后,它也应该询问用户是否应该运行最后一个命令。我希望这种情况发生,直到答案变为“否”,如果答案为“否”,那么它应该退出。

IE

$ cat shellscript.sh
  echo foo
  printf 'Can I run the last command (y/n)?' 

如果我的答案是肯定的,那么它应该运行命令“echo foo”

  # after the 1st time execution
  printf 'Can I run the last command again (y/n)?'

如果答案为是,它将再次运行该命令,它将执行相同的操作(询问 y/n 并执行),直到答案为是。如果不是,那么它应该退出。

我认为我需要实现某种循环,但我很困惑,因为这是条件脚本。

答案1

使用bash:

while [[ "$REPLY" != "no" ]]
do
  echo foo
  read -p "Can I run the last command (yes/no)?"
done

这需要一个字面上的“否”答案才能退出循环,因此我更多地拼写了“是/否”提示。

bashread允许自定义提示(-p后面的 和 字符串),并将用户的响应存储在 $REPLY 变量中,我认为在进入循环之前它不是“否”(如果您还没有read任何内容,则它是空的)。

答案2

替代方案杰夫的回答:

while true; do
    somecommand

    while true; do
        read -p 'Can I run the last command again (yes/no)? '

        case "$REPLY" in
            [Yy]*) break   ;;
            [Nn]*) break 2 ;;
            *) echo 'Sorry, what?' >&2
        esac
    done
done

这里的主要区别是我们坚持从用户那里得到有效的回复。有效回复是以 or 开头的任何字符串yn忽略大小写)。

将会break跳出答案阅读循环,同时break 2还将跳出命令循环。

相关内容