0

スクリプトを bash からダッシュに変換しています... 関数の戻りコードを取得する際に問題があります。

#!/bin/sh
check_ip() {
    local netbit=`echo "$1" | awk -F\/ '{print $1}'`
    local netmask=`echo "$1" | awk -F\/ '{print $2}'`

    if case "$netbit" in
        *[!.0-9]* | *.*.*.*.* | *..* | [!0-9]* | *[!0-9] ) false ;;
        *25[6-9]* | *2[6-9][0-9]* | *[3-9][0-9][0-9]* | *[0-9][0-9][0-9][0-9]* ) false;;
        *.*.*.* ) true ;;
        * ) false ;;
    esac; then
        if [ ! -z "$netmask" ] ; then
            if [ "$netmask" -ge 1 ] && [ "$netmask" -le 32 ] ; then
                return 0
            else
                return 1
            fi
        else
            return 0
        fi
    else
        return 1
    fi
}

# this is working without the [] thing.
if check_ip "$1" ; then
    echo ok
else
    echo no
fi

@barmarが提案したように、別のマシンから同様のスクリプトを検索しましたが、 [] はありません。すべてが今働いています。どうもありがとうございます。

4

2 に答える 2

2

$?最後に実行されたコマンドの終了ステータスを読み取ります。

a() {
  return 0;
}

b() {
  return 1;
}

a;
echo $?;
b;
echo $?;

戻ります:

0
1
于 2013-06-21T05:13:27.800 に答える
0

コマンドは、コマンドの終了ステータスに基づいてor句をif選択します。コマンドで定義されたテストを実行する場合にのみ使用します。特定のコマンドをテストしたいだけの場合は、それを直接使用します。thenelse[test

if check_ip "$ip"
then echo Good IP
else echo Bad IP
fi

また$!、関数に適切なパラメーターになる可能性はほとんどありません。$!IP ではなく、開始された最後のバックグラウンド プロセスの PID です。

于 2013-06-21T05:22:56.270 に答える