为什么在此bash脚本中出现这些错误?

时间:2019-05-25 01:06:16

标签: bash

我正在尝试编写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

1 个答案:

答案 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