脚本错误 - cygwin - ping主机并检查它是否存活?

时间:2015-07-23 02:29:48

标签: bash cygwin ping scripting-language

我是脚本新手。

我下载了cygwin和Notepad ++(我正在使用unix选项 - 用于编写和保存“.sh文件”) 我有以下脚本

以下代码来自命令$ cat -v pinging.sh

#!/bin/bash

target=$1
# email report when
SUBJECT="Ping failed"
EMAILID="someemailid@gmail.com"

count=$( $SYSTEMROOT/system32/ping -n -c 1 $target | grep 'received')
if [ $count == 0 ];
then
    echo "Host : $target  is not Alive!! Try again later.. at $(date)" | mail -s "$SUBJECT" $EMAILID

else
    echo "Yes! Host is Alive!"

fi
done

但是我的脚本给出了错误 -

$ ./pinging.sh www.google.com
./pinging.sh: line 9: [: ==: unary operator expected
Yes! Host is Alive!
./pinging.sh: line 17: syntax error near unexpected token `done'
./pinging.sh: line 17: `done'

我不确定我在这里做错了什么。

  1. 脚本出错
  2. 即使在目的地无法访问的消息的情况下,我总是会收到“host is alive”消息。如果我正在使用ping www.somesite.com并且如果我通过cygwin或cmd获得目的地无法访问,则此代码将使主机处于活动状态。

    我也试过[$ count -et 0];在上面的代码中

  3. 请帮助我!

    最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

$count变量的值不是数字。这是一整行文字。

当您在[测试中展开它(没有引号)时,它会被shell分词并且[测试的内容变得无效(太多单词)并且您得到错误

如果您引用"$count",您将避免错误(但仍未获得您想要的结果)。

您需要从ping输出中过滤出仅 的数字,然后在[测试中使用该数字。

set -x添加到脚本顶部,以查看实际运行的命令,并且您将看到问题。