3

これらの2つの引数を組み合わせて、関数を機能させようとしています

#!/bin/bash

while [ $? -gt 0 ] 
do
  case "$1" in             
    [0-9]*-[0-9]*)
      for ip in $(sec ${1%-*} ${##*-})
      do
        ping -c 1 192.168.1.$ip
        (shift)?
      done
      ;;
    a)
      >/dev/null;
      [ $? -eq 0 ] && echo "192.168.1.$ip is up!" ||:;
      ;;
  esac
done

通常、両方の関数を[0-9]*-[0-9]*)引数に入れると、たとえば出力として取得できます

someTest.sh 90-105 

90 から 105 の間の IP 番号をチェックしますが、次のようにしたいと思います。

sometest.sh 90-105 -a
4

2 に答える 2

1

コマンドラインで指定した範囲からマシンがアップかダウンかを確認したいのですが。forループを使用して簡単に行うことができます。

#!/bin/bash

a=$1;
b=$2;

for ((i=a;i<=b;i++)) do

   ping -c 1 -w 1 192.168.1.$i  >> /dev/null 2>&1

   if [ $? -eq 0 ]; then
      echo "192.168.1.$i is up";
   else
      echo "192.168.1.$i is down";
   fi

done

コマンドラインから次のコマンドを実行./script 10 50します。192.168.1.10から192.168.1.50までのマシンにpingを実行します。


次のような引数を渡したい場合は、次のよう./script 10-50にすることもできます。

#!/bin/bash

OLDIFS=$IFS
IFS=$'\-'
set $@

a=$1;
shift;
b=$1;

for ((i=a;i<=b;i++)) do

   ping -c 1 -w 1 192.168.1.$i  >> /dev/null 2>&1
   if [ $? -eq 0 ]; then
     echo "192.168.1.$i is up";
   else
     echo "192.168.1.$i is down";
   fi

done

IFS = $ OLDIFS

于 2012-08-23T12:36:43.810 に答える
0

特定の範囲内の IP に ping を実行し、さらに追加の引数 (-a および/または -b) を渡すことができるようにしたい場合は、getopts を参照して、必要な数の引数を簡単に処理できます。またはオプションなし:

usage()
{
cat << EOF
usage: $0 options iprange

OPTIONS:
   -a      set a option
   -b      set b option
   -r      set rangei, e.g 1 10
EOF
}

A=
B=

while getopts “abr:” OPTION
do
     case $OPTION in
         a)
             A=1
             ;;
         b)
             B=1
             ;;
         r)  
             RANGE="$OPTARG"
             ;;
         ?)
             usage
             exit
             ;;
     esac
done

for i in $(seq $RANGE); do
    ping -c 1 -w 1 192.168.1.$i  >> /dev/null 2>&1

    if [ $? -eq 0 ]; then
        echo "192.168.1.$i is up";
    else
        echo "192.168.1.$i is down";
fi
done

これを次のように呼び出します。

./somescript.sh -a -b -r "10 34"

$A 変数と $B 変数をチェックして、それらの値に基づいてやりたいことを何でもできます。

範囲区切りの間にダッシュがなく、引用符が必要です。これをすばやく書いてください。上記の KingsIndian のソリューションのようなものを使用して対処できます。

于 2012-08-23T14:21:39.757 に答える