首页 > 解决方案 > 如何在 BASH 中跳过不同的提示

问题描述

我正在寻找一种自动化脚本执行的方法,它有 5 个提示:4xYES1*NO. 提示总是位于同一个地方:

是的 | 是的 | 是的 | 没有 | 是的

类似于以下示例中的内容(基于 3 个提示):

#!/bin/bash

read -r -p "Ready to proceed? [yes/no]: " input

if [[ "$input" = "yes" ]]
 then
  read -r -p "Or maybe abort? [yes/no]: " answer
   if [[ "$answer" = "no" ]]
    then
     read -r -p "So... proceed? [yes/no]: " response
      if [[ "$response" = "yes" ]]
       then echo "NICE JOB!!!"
      fi
   fi
fi

显然,通过管道将单个“是”或“否”传递给此脚本将不起作用,因为预期的响应不同。不知道是否有办法通过管道传递多个参数。

我想创建一个数组PROMPT=(yes no yes),并$i通过管道传递给脚本,但这也行不通,而且我不需要为每个数组执行循环脚本$i

如果它们的位置不变,有什么方法可以将不同的答案传递给提示?

标签: linuxbashscripting

解决方案


你可以使用printf和管道

printf '%s\n' yes yes yes no yes | ./script.sh

或输入重定向和进程替换

./script.sh < <(printf '%s\n' yes yes yes no yes)

或此处的字符串

./script.sh <<<$'yes\nyes\nyes\nno\nyes'

或此处的文档

./script.sh <<'EOF'
yes
yes
yes
no
yes
EOF

推荐阅读