我一直在尝试编写一个脚本来询问用户是否应该再次运行该命令。
如果答案是肯定的,那么它应该再次执行最后一个命令。即使在第二次执行后,它也应该询问用户是否应该运行最后一个命令。我希望这种情况发生,直到答案变为“否”,如果答案为“否”,那么它应该退出。
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 开头的任何字符串y
(n
忽略大小写)。
将会break
跳出答案阅读循环,同时break 2
还将跳出命令循环。