Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
在Bash脚本中读取带换行符的粘贴输入_Bash_Scripting - Fatal编程技术网

在Bash脚本中读取带换行符的粘贴输入

在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]{

我已经试了几个晚上来让这个脚本在没有运气的情况下运行。我正在尝试使用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]{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