我正在编写一个脚本,用于从用户那里获取多个ip地址。我不确定是否可以使用BASH或Python来允许用户在一个粘贴操作中输入所有值。目前的流程是:
echo -e "Enter prefixes separated by spaces with CIDR):"
read PREFIXES
#Declaring the array for number of prefixes entered
declare -a prefix_entered=($PREFIXES)
但是这会导致用户必须在一个长字符串中输入每组IP地址。有没有更好的办法?感谢
很抱歉这个混乱。因此,不要让用户粘贴这样的字符串:
191.248.25.0/16 191.252.24.0/24 191.252.128.0/24 191.252.64.0/24 191.252.16.128/25 191.252.32.128/25 191.252.25.64/26
我希望他们能够像这样输入:
191.248.25.0/16
191.252.24.0/24
191.252.128.0/24
191.252.64.0/24
191.252.16.128/25
191.252.32.128/25
191.252.25.64/26
但它会引发错误。我理解,因为它需要被制作成阵列,但我不确定如何。 感谢
希望这张图片有助于让我的问题更容易理解。
答案 0 :(得分:0)
由于IP不能包含星号,空格或其他有趣的字符,因此您可以在IFS上使用不带引号的变量并拆分。例如:
$ cat script.sh
#!/bin/bash
ip=$(cat) # type the ips you want, seperated by space, tab,
# or newline, When done, press Ctrl-D
# Note that $ip is intentionally left unquoted
prefix_entered=($ip)
printf "%s\n" "${prefix_entered[@]}"
$ ./script.sh
191.248.25.0/16 191.252.24.0/24 191.252.128.0/24 191.252.64.0/24 191.252.16.128/25 191.252.32.128/25 191.252.25.64/26 # <-- Pressed enter and ctrl-D here
191.248.25.0/16
191.252.24.0/24
191.252.128.0/24
191.252.64.0/24
191.252.16.128/25
191.252.32.128/25
191.252.25.64/26
$ ./script.sh
191.252.24.0/24
191.252.128.0/24
191.252.64.0/24
191.252.16.128/25
191.252.32.128/25
191.252.25.64/26 # <-- Pressed enter and ctrl-D here
191.252.24.0/24
191.252.128.0/24
191.252.64.0/24
191.252.16.128/25
191.252.32.128/25
191.252.25.64/26
答案 1 :(得分:0)
bash版本的oneliner&gt; = 4感谢this answer:
readarray -t prefix_entered
这将接受来自用户的列表并将其存储在数组prefix_entered
中,每行一个元素。用户仍然必须在列表末尾点击Control-D,告诉readarray
没有更多地址。