cat test.txt
主机01-pc.local
i=host01-pc.local
sed -i "/$i/d" ./test.txt
cat test.txt
所以这在 shell 中有效,但是当我在脚本中运行它时
readarray PC < ./test.txt
for i in "${PC[@]}";
do
ping -c 1 -W 20 $i
if [ $? -eq 0 ];
then echo -e "$i is reachable";
sed -i "/$i/d" ./test.txt
else
echo -e "$i no ping"
fi
done
我收到错误消息
sed:-e表达式#1,字符26:未终止的地址正则表达式
答案1
不知道它是否是更大的东西的冲洗版本,我只修改了原始脚本中最少量的细节。在 GNU Bash 上测试。
#!/usr/bin/bash
readarray -t arr < test.txt
for i in "${arr[@]}"; do
if ping -c 1 -W 20 "$i" > /dev/null 2>&1; then
echo "$i is reachable"
sed -i "/$i/d" test.txt
else
echo "$i no ping"
fi
done
*感谢@steeldriver 对-t
添加到 的标志的评论readarray
。