我是脚本新手。
我下载了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'
我不确定我在这里做错了什么。
即使在目的地无法访问的消息的情况下,我总是会收到“host is alive”消息。如果我正在使用ping www.somesite.com并且如果我通过cygwin或cmd获得目的地无法访问,则此代码将使主机处于活动状态。
我也试过[$ count -et 0];在上面的代码中
请帮助我!
最诚挚的问候,
答案 0 :(得分:1)
$count
变量的值不是数字。这是一整行文字。
当您在[
测试中展开它(没有引号)时,它会被shell分词并且[
测试的内容变得无效(太多单词)并且您得到错误
如果您引用"$count"
,您将避免错误(但仍未获得您想要的结果)。
您需要从ping
输出中过滤出仅 的数字,然后在[
测试中使用该数字。
将set -x
添加到脚本顶部,以查看实际运行的命令,并且您将看到问题。