4

私はいくつかのシェル スクリプトを学習しようとしていますが、ccna の学習と組み合わせるとよいと思います。そのため、ユーザーから提供された IP アドレスとサブネットマスクに基づいてネットワーク デバイスをスキャンする簡単なスクリプトを作成しています。ホストが属しているネットワークを特定するには、次のコード行を使用しますが、エラーが発生し続けます。

read -p "Geef een IP-adres op "  i
read -p "Geef een subnetmask op "  s

IFS=. read -r i1 i2 i3 i4 <<< $i
IFS=. read -r m1 m2 m3 m4 <<< $s

ip=`printf "%d.%d.%d.%d\n" $i1 $i2 $i3 $i4`
mask=`printf "%d.%d.%d.%d\n" $m1 $m2 $m3 $m4`

#bepaal netwerk id
id=`printf "%d.%d.%d.%d\n" "$((i1 & m1))" "$((i2 & m2))" "$((i3 & m3))" "$((i4 & m4))"`

エラーは次のように生成されます。

192 168 178 15 &  0xff 0xff 0xff 0x00: syntax error in expression (error token is "168 178 15 &  0xff 0xff 0xff 0x00")

理由を教えてくれる人はいますか?

4

1 に答える 1

4

read問題は、呼び出しに渡された変数を引用することです。代わりにこれを行う場合 (引用符を追加):

IFS=. read -r i1 i2 i3 i4 <<< "$i"
IFS=. read -r m1 m2 m3 m4 <<< "$s"

すべてが再び機能します。理由はまだわかりません。

于 2013-09-28T18:49:33.697 に答える