cat test.txt
Host01-pc.local
i=host01-pc.local
sed -i "/$i/d" ./test.txt
cat test.txt
따라서 이것은 셸에서 작동하지만 스크립트에서 실행하면
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
*-t
추가된 플래그에 대해 의견을 주신 @steeldriver에게 감사드립니다 readarray
.