1

一部でIPを取り込み、そのIPに基づいて他のネットワーク設定を決定するスクリプトをbashで設定しています。これが私が持っているものです

if[ 1 <= $net <= 5]
then
    network=10.1.0.0
    netmask=255.255.248.0
    gateway=10.1.0.1
elif[16 <= $net <= 23]
then
    network=10.1.16.0
    netmask=255.255.248.0
    gateway=10.1.16.1

elif[24 <= $net <= 31]
then
    network=10.1.24.0
    netmask=255.255.248.0
    gateway=10.1.24.1
elif[32 <= $net <= 39]
then
    network=10.1.32.0
    netmask=255.255.248.0
    gateway=10.1.32.1

…………(しばらくそのまま。

ケースなどを使用してこれを行うより良い方法はありますか?

また、IF ステートメントを正しく実行しているかどうかもわかりません。

前もって感謝します。

編集:IPアドレスは「読み取り」入力から供給され、値を取得するためにカットされることを忘れていたと思います。

IE ユーザーは 10.1.40.207 を入力します

4

2 に答える 2

1

(他の回答に示されているように)値を直接計算できる場合、多くのスクリプトが不要になります。ただし、有効/無効な入力を確認する必要がある場合があります。しかし、これは拡張された if/elif/else/fi を使用せずに行うこともできます。

しかし、質問に答えるために、数値の範囲をチェックできるif/elseがあります(「ケース」が問題を単純化するとは思いません):

#!/bin/bash

arg=$1

if  ((  1 <= arg && arg <= 5 )) ; then
  echo "from 1-5: $arg"
elif (( 16 <= arg && arg <= 23 )) ; then
  echo "from 16-23: : $arg"
elif (( 24 <= arg && arg <= 31 )) ; then
  echo "from 24-31: : $arg"
else
  echo "invalid : $arg"
fi

主なポイントは((...))、 ではなく、算術評価に使用されること[..]です。と同等でlet、true/false を返します。

出力例:

$ ./scr 1
from 1-5: 1

$ ./scr 7
invalid : 7

$ ./scr 23
from 16-24: : 23
于 2013-03-02T08:50:45.997 に答える