ipfile.txt
형식은 다음과 같습니다.
ServerA 127.0.0.1
ServerB 192.168.1.254
ServerC 4.2.2.1
쉘 스크립트에서 원하는 출력:
ServerA Class A
ServerB Class C
ServerC Class A
첫 번째 옥텟만 추출하는 더 좋은 방법은 생각나지 않습니다. 지금까지 내 스크립트는 다음과 같습니다
#!/bin/bash
# Take input IP from file and classify according to classful addressing.
while read ip;do
octet=$(awk -F'[ .]' '{print $2}' ipfile.txt)
if [[ "$octet" -ge 1 && "$octet" -le 127 ]];then
echo "ServerA Class A"
fi
if [[ "$octet" -ge 128 && "$octet" -le 191 ]];then
echo "ServerB Class B"
fi
if [[ "$octet" -ge 192 && "$octet" -le 223 ]];then
echo "ServerC Class C"
fi
done < ipfile.txt
구문 오류가 발생합니다.
./ipclassgen.sh: line 7: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 10: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 13: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 7: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 10: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 13: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 7: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 10: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 13: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 7: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 10: [[: 127
192
4: syntax error in expression (error token is "192
4")
./ipclassgen.sh: line 13: [[: 127
192
4: syntax error in expression (error token is "192
4")
awk를 사용하지 않고 파일을 지정하지 않고 어떻게 이를 수행할 수 있습니까? 또한 구문 오류가 어디에 있는지 잘 모르겠습니다.
답변1
파일을 한 줄씩 ip
변수로 읽어오지만 절대 사용하지 않습니다. 그런 다음 모든 줄의 두 번째 필드를 octet
(\n, 0x0A)로 구분된 변수에 할당하고 <NL>
파일을 다시 읽습니다. 그런 다음 테스트하는 동안 bash
여러 줄을 우연히 발견했습니다 . octet
다음으로 변경해 보세요.
while read server ip
do octet=${ip%%.*}
.
.
.
done < file
server
또한 서버 이름을 하드코딩하지 않고 대신 파일에서 읽은 변수를 사용하는 것이 더 현명할 수도 있습니다.
if [[ "$octet" -ge 1 && "$octet" -le 127 ]]
then echo "$server: Class A"
fi
read
추신: 라인을 분할 할 수도 있습니다 .
while IFS=" ." read server ip1 ip2 ip3 ip4
do if [[ "$ip1" ...