Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在bash脚本中接受多行输入 我正在写一个BASH脚本。我遇到的一个悬而未决的问题是如何一次接受来自用户的多个输入_Linux_Bash_Unix_Awk_Sed - Fatal编程技术网

Linux 在bash脚本中接受多行输入 我正在写一个BASH脚本。我遇到的一个悬而未决的问题是如何一次接受来自用户的多个输入

Linux 在bash脚本中接受多行输入 我正在写一个BASH脚本。我遇到的一个悬而未决的问题是如何一次接受来自用户的多个输入,linux,bash,unix,awk,sed,Linux,Bash,Unix,Awk,Sed,具体来说,当脚本要求输入时,用户必须能够输入多个域名 例如,脚本运行部分: Enter the domain names : 并且用户必须能够通过手动输入每一行来逐行输入域名,或者他/她只需从某处复制域名列表并能够将其粘贴到脚本输入中,如下所示: domain1.com domain2.com domain3.com domain4.com 可能吗?使用循环: #!/bin/bash arrDomains=() echo "Enter the domain names :" while

具体来说,当脚本要求输入时,用户必须能够输入多个域名

例如,脚本运行部分:

Enter the domain names :
并且用户必须能够通过手动输入每一行来逐行输入域名,或者他/她只需从某处复制域名列表并能够将其粘贴到脚本输入中,如下所示:

domain1.com
domain2.com
domain3.com
domain4.com
可能吗?

使用
循环

#!/bin/bash

arrDomains=()
echo "Enter the domain names :"

while read domain
do
    arrDomains+=($domain)
    # do processing with each domain
done

echo "Domain List : ${arrDomains[@]}"

输入所有域名后,按ctrl+D以结束输入。

是,您可以:使用
readarray

printf "Enter the domain names: "
readarray -t arr
# Do something...
declare -p arr
上面的最后一行记录了bash现在所看到的数组

用户可以键入或复制并粘贴阵列名称。用户完成后,在行首键入Ctrl-D

例如:

$ bash script
Enter the domain names: domain1.com
domain2.com
domain3.com
domain4.com
declare -a arr='([0]="domain1.com" [1]="domain2.com" [2]="domain3.com" [3]="domain4.com")'
因此,我确实走上了正确的道路,但对于如何将这些数据不仅分配给变量,而且重要的是,保留空格和换行符,我仍然非常困惑

在完成了许多StackOverflow和StackExchange的回答之后,我创建了以下代码片段,展示了如何创建。这是我的:

#############################################################
#从现有文件或用户输入中获取脚本#
#                                                           #
#版权所有©2020 Theodore R.Smith#
#许可证:知识共享署名v4.0国际版#
#发件人:https://github.com/hopeseekr/BashScripts/           #
#@见https://stackoverflow.com/a/64486155/430062          #
#############################################################
函数grabScript()
{
如果[!-z“$1”]&&&[-f“$1”];则
echo$(&2
echo“请键入/粘贴您希望在NetworkManager连接到“${HOTSPOT}”时运行的bash脚本”>&2
echo“完成后按CTRL+D”。>&2
echo“您应该以“#!/bin/bash”…”开头”>&2
回显“”>&2
#读取用户输入,直到CTRL+D。
#@见https://stackoverflow.com/a/38811806/430062
readarray-t用户输入
#输出为换行字符串。
#@见https://stackoverflow.com/a/15692004/430062
printf'%s\n'${user\u input[@]}
fi
}
脚本=$(抓取脚本“$2”)
#保留空白和换行符。
#@见https://stackoverflow.com/a/18018422/430062
回显“$SCRIPT”

非常感谢:)我发布了一个部分基于此代码的代码片段。我一点也不确定declare-p应该做什么,但它肯定没有把它放在变量中@TheodoreR.Smith
declare-parr
的目的是打印一个变量的内容。在答案中的示例中,
declare-p
行是生成输出的
eclare-a arr='([0]=“domain1.com”[1]=“domain2.com”[2]=“domain3.com”[3]=“domain4.com”)