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.Smithdeclare-parr
的目的是打印一个变量的内容。在答案中的示例中,declare-p
行是生成输出的eclare-a arr='([0]=“domain1.com”[1]=“domain2.com”[2]=“domain3.com”[3]=“domain4.com”)