我正在尝试将这两个参数结合起来使我的功能正常工作
#!/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
答案 0 :(得分: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 ping到192.168.1.50。
如果您想传递像./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
答案 1 :(得分:0)
如果您想要做的是在一定范围内ping IP,并且还能够传递其他参数(-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的解决方案来解决这个问题。