在Bash脚本中读取带换行符的粘贴输入
我已经试了几个晚上来让这个脚本在没有运气的情况下运行。我正在尝试使用Bash编写一个脚本,允许用户粘贴一块文本,该脚本将从文本中grep出有效的IP地址,并自动按顺序ping它们 到目前为止,经过大量修改后,我仍停留在这一点上:在Bash脚本中读取带换行符的粘贴输入,bash,scripting,Bash,Scripting,我已经试了几个晚上来让这个脚本在没有运气的情况下运行。我正在尝试使用Bash编写一个脚本,允许用户粘贴一块文本,该脚本将从文本中grep出有效的IP地址,并自动按顺序ping它们 到目前为止,经过大量修改后,我仍停留在这一点上: #!/bin/sh echo Paste Text with IP Addresses read inputtext echo "$inputtext">inputtext.txt grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{
#!/bin/sh
echo Paste Text with IP Addresses
read inputtext
echo "$inputtext">inputtext.txt
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" inputtext.txt > address.txt
awk '{print $1}' < address.txt | while read ip; do
if ping -c1 $ip >/dev/null 2>&1; then
echo $ip IS UP
else
echo $ip IS DOWN
fi
done
rm inputtext.txt
rm address.txt
#/垃圾箱/垃圾箱
使用IP地址回显粘贴文本
阅读输入文本
回显“$inputtext”>inputtext.txt
grep-E-o“([0-9]{1,3}[\.]){3}[0-9]{1,3}”inputtext.txt>address.txt
awk'{print$1}'/dev/null 2>&1;然后
echo$ip上升了
其他的
echo$ip下降了
fi
完成
rm inputtext.txt
rm address.txt
运行此脚本后,将根据需要提示用户,如果第一行文本中包含IP地址,则ping检查将成功,但该行之后的所有文本都将显示在以下命令提示符中。因此,我的问题似乎在于何时从用户输入中读取。正在读取的唯一部分是第一行,一旦遇到中断,脚本在其工作中不会考虑超过第一行的任何行。如前所述,您只需要一个外部循环来实际读取每行用户输入
#!/bin/sh
echo Paste Text with IP Addresses
while read -r inputtext
do
echo "$inputtext">inputtext.txt
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" inputtext.txt > address.txt
awk '{print $1}' < address.txt | while read ip; do
if ping -c1 $ip >/dev/null 2>&1; then
echo $ip IS UP
else
echo $ip IS DOWN
fi
done
rm inputtext.txt
rm address.txt
done
出于某种原因,我发现当我执行此脚本时,在2或3个IP返回其结果后,继续执行需要花费大量的时间。我会继续努力的,但是任何关于延迟原因的建议都是非常受欢迎的!
#!/bin/sh
echo Paste Text with IP Addresses
while read -r inputtext
do
ip=$(echo "$inputtext" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | awk '{print $1}')
if ping -c1 $ip >/dev/null 2>&1; then
echo $ip IS UP
else
echo $ip IS DOWN
fi
done