web-dev-qa-db-ja.com

一部のIPでelseが失敗した場合はlinux

私は次のコードをifthenで使用してマウントしています。一部のIPでは機能しますが、一部のIP、特にFAILUREステートメントでは機能しません。

これがコードです

is_mounted() {
    mount | grep -qohw "$1"
}


{
pass=
for ip in  123.456.789  223.456.789
do
    if is_mounted "$ip"
    then
        echo -e " STACK MOUNT \e[1;33mALREADY\e[00m AVAILABLE \e[1;33mPASSED\e[00m "
        pass=1
        break
    fi
    mount -t nfs -o ro,nolock "$ip:/opt/media/" /mount/stack &>/dev/null
    if is_mounted "$ip"
    then
        echo -e " STACK MOUNT AVAILABLE \e[1;33mPASSED\e[00m "
        pass=1
        break
    fi
done
[ "$pass" ] || echo -e " STACK MOUNT NOT AVAILABLE          \e[00;31mFAILED\e[00m"
} | tee /tmp/log

これらは、139.41.170.10、197.21.82.10、139.41.170.11、197.21.82.11、139.31.125.11で障害が発生したIPです。理想的には、どのIPでも機能するはずです。また、これらすべてのIPを使用したい '139.41.170.10 197.21.82.10 139.41.170.11 197.21.82.11 139.31.125.11のIPの場合'。 AWKの提案。

1
user2692634

is_mounted関数で、mountの出力をテストして、何かが返されたことを確認し、それに応じて0または1を返す必要があります。

また、bashに組み込まれているデバッグ機能を使用することを強くお勧めします。デバッグを試みるのではなく、何が問題になっているのかがすぐにわかります。

デバッグするコードのブロックの先頭にset -xを置き、無効にする場合はset +xを置きます。

... some code ...

set -x
... code to debug ...
set +x

... more code ...
2
slm