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
read
PS:ラインを分割することもできます。
while IFS=" ." read server ip1 ip2 ip3 ip4
do if [[ "$ip1" ...