我正在创建一个基本的端口扫描程序并具有扫描程序的功能,但是我正在努力添加一个用于调整超时功能的功能。如何让bash注意到$ 1和$ 2不存在,并继续在命令行输入中读取$ 3 $ 4 $ 5?这是我到目前为止所拥有的
#!/bin/bash
changetime=$1
newtime=$2
host=$3
startport=$4
stopport=$5
if [ $1 = "-t" ]
then
timeout "$newtime"
echo "Timeout changed to $newtime second(s)."
else
$changetime=0
$newtime=0
fi
如果我输入bash命令,我就能使扫描仪正常工作
./portscanner.sh -t 3 www.google.com 79 81
但是bash不喜欢我放在else后面的任何东西
答案 0 :(得分:3)
尝试:
#!/bin/bash
if [ $1 = "-t" ]
then
changetime=$1
newtime=$2
#timeout "$newtime"
echo "Timeout changed to $newtime second(s)."
shift 2
else
changetime=0
newtime=0
fi
host=$1
startport=$2
stopport=$3
echo "newtime=$newtime host=$host startport=$startport stopport=$stopport"
例如:
$ ./portscanner -t 3 www.google.com 79 81
Timeout changed to 3 second(s).
newtime=3 host=www.google.com startport=79 stopport=81
$ ./portscanner www.google.com 79 81
newtime=0 host=www.google.com startport=79 stopport=81
此处的关键更改是添加了shift
。通过以下命令行示例,我们可以看到shift如何对参数进行操作:
$ set -- 1 2 3 4
$ echo "$@"
1 2 3 4
$ shift 2
$ echo "$@"
3 4
因此,shift 2
删除了前两个参数,剩下的参数(现在已重新编号,以$1
重新开始)。