我正在尝试编写bash ping清扫器,但收到两个错误消息。
第一个是:
./pingsweep.sh: line 2: [192.168.199.182: command not found
第二个是
ping: 192.168.199.182.seq: Name or service not known.
我无法从初始代码中发现错误:
#!/bin/bash
if ["$1" == ""]
then
echo "Usages:./pingsweep.sh [network]"
echo "Example: ./pingsweep.sh 192.168.199"
else
for ip in 'seq 1 254'; do
ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | sed 's/.$//'&
done
fi
答案 0 :(得分:2)
您的句段["$1"
构造一个单字,以[
开头,并以您作为第一个参数传递的内容结尾。因为那不是bash内置函数之一(例如[
),所以它将尝试作为命令运行它并失败:
./pingsweep.sh: line 2: [192.168.199.182: command not found
^^^^^^^^^^^^^^^^
|
+--> see *especially* this first character.
在[
和变量之间以及结束]
之前也需要一个空格。即使语法不需要 ,但我的OCD敏感性还是需要它:-)
if [ "$1" == "" ]
此外,命令for ip in 'seq 1 254'
(请注意单引号)将遍历一个字符串seq 1 254
,不运行该命令并进行迭代超过其输出。为此,您需要使用反引号(`
)而不是引号,或者使用我的首选项,因为它们更易于嵌套:
for ip in $(seq 1 254)
但是请记住,bash
实际上具有不错的循环,而不必求助于seq
:
for (( ip=1; ip<10; ip++ )); do echo $ip; done