0

私の現在のスクリプト:

#!/usr/local/bin/bash
echo -n "Enter VPS IP address:"
read userinput
lookupip="vps $userinput"

if [[ $userinput -lt 80.* || $userinput -gt 255.* ]] #checks input is in the range
 then
   echo "Input outside acceptable range."
 else

#The grep removes all from VPS tool output except primary IP address

$lookupip | grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' | sed '1 ! d' | xargs ping -oc 1000 -Q

fi

最小のIPアドレス範囲は80.XXXの範囲で、私は以下を使用してみました。

8 *
80* 80
。。。*

しかし、それは常にエラーになります:

line 10: [[: 80.X.X.X: syntax error in expression (error token is ".X.X.X")

(lt)未満およびgt(より大きい)IPアドレスの範囲を定義するための最良の方法は何でしょうか?

4

2 に答える 2

2

IP アドレスが有効かどうかだけを確認したい場合は、bash で ipcalc コマンドを使用してこれを確認できます。

ipcalc -c $userinput
example
ipcalc -c 10.20.30.401
ipcalc: bad IPv4 address: 10.20.30.401
于 2013-04-11T18:22:07.200 に答える
1

おそらく最善の解決策ではありませんが、スクリプトの簡単な修正として、次のようにする必要があります。

#!/usr/local/bin/bash
echo -n "Enter VPS IP address:"
read userinput
lookupip="vps $userinput"
first_octet=`echo "$userinput" | cut -d'.' -f1`

if [[ $first_octet -lt 80 || $first_octet -gt 255 ]]
 then
   echo "Input outside acceptable range."
 else

#The grep removes all from VPS tool output except primary IP address

$lookupip | grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' | sed '1 ! d' | xargs ping -oc 1000 -Q

fi

EDITED:より良い解決策は、3つのIPアドレス(検査中のもの、最低のものと最高のもの)をすべてパラメーターとして取り、それらを32ビットの数値に変換し(それがinet_aton()関数の機能です)、範囲を確認することです:

#!/usr/local/bin/bash

inet_aton ()
{
    local IFS=. ipaddr ip32 i
    ipaddr=($1)
    for i in 3 2 1 0
    do
        (( ip32 += ipaddr[3-i] * (256 ** i) ))
    done

    return $ip32
}

echo -n "Enter VPS IP address, min IP address, max IP address:"
read userinput

ip1=`echo "$userinput" | cut -d' ' -f1`
ip2=`echo "$userinput" | cut -d' ' -f2`
ip3=`echo "$userinput" | cut -d' ' -f3`

lookupip="vps $ip1"

ip=`inet_aton $ip1`
min=`inet_aton $ip2`
max=`inet_aton $ip3`

if [[ $ip -lt $min || $ip -gt $max ]]
 then
   echo "Input outside acceptable range."
 else

#The grep removes all from VPS tool output except primary IP address

$lookupip | grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' | sed '1 ! d' | xargs ping -oc 1000 -Q

fi

唯一の違いは、以前のように 1 つではなく、3 つの IP アドレスを入力する必要があることです。もちろん、最下位および最上位の IP アドレスをハードコーディングするか、別の場所から取得することもできますが、パラメーターの検証とエラー チェックとともに、それはあなた次第です。

于 2013-02-07T12:57:22.760 に答える