シェルスクリプトのIPアドレスからオクテットを正しく抽出できません。

シェルスクリプトのIPアドレスからオクテットを正しく抽出できません。

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

ファイルを1行ずつip変数として読み込みますが、絶対に使用しません。次に、すべての行の2番目のフィールドを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

readPS:ラインを分割することもできます。

while IFS=" ." read server ip1 ip2 ip3 ip4
  do if [[ "$ip1" ...

関連情報