读取用户的服务器列表?

读取用户的服务器列表?

如何读取用户输入的服务器列表并将其保存到变量中?

例子:

Please enter list of server:
(user will enter following:)
abc
def
ghi
END

$echo $variable

abc
def
ghi

我希望它在 shell 脚本中运行。如果我在 shell 脚本中使用以下内容:

read -d '' x <<-EOF

它给了我一个错误:

line 2: warning: here-document at line 1 delimited by end-of-file (wanted `EOF')

请建议我如何将其合并到 shell 脚本中?

答案1

你可以做

servers=()                     # declare an empty array
# allow empty input or the string "END" to terminate the loop
while IFS= read -r server && [[ -n $server && $server != "END" ]]; do
    servers+=( "$server" )     # append to the array
done
declare -p servers             # display the array

这还允许用户手动键入条目或从文件重定向。

答案2

脚本或程序要求用户交互式地提供项目列表的情况非常罕见(实际上就像穷人的文本编辑器一样,无法撤消)。

脚本或程序从准备好的文件中读取项目列表的情况更为常见:

#!/bin/sh

while IFS= read -r item; do
    printf 'The item given by the user is %s\n' "$item"
done

该脚本将用作

$ ./script.sh <myfile

其中将myfile是一个文本文件,其中包含脚本将读取并执行某些操作的行。

运行这个脚本没有输入文件是可能的。然后必须手动输入输入。要发出此手动输入结束的信号,可以按Ctrl+D

相关内容