条件表达式中的Bash语法错误

时间:2014-06-28 20:53:45

标签: bash if-statement syntax-error

我正在尝试制作一个简单的bash脚本,它将遍历包含IP地址的文本文件, ping他们一次,看看他们是否还活着。

到目前为止,这是我的工作:

#!/bin/bash

for ip in $(cat ips.txt); do
if [[ "1" ==  "$(ping -c 1 $ip | grep 'packets transmitted' | cut -d ' ' -f 4)"]]
echo $ip
fi
done

有什么建议吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

这似乎有效:

#!/bin/bash
for ip in $(cat ips.txt); do
if [ "1" ==  "$(ping -c 1 $ip | grep 'packets transmitted' | cut -d ' ' -f 4)" ]; then
    echo $ip
fi
done

; then语句之后需要if [ ... ](同样适用于elif,而不是else),以及语句的最后一个括号和声明的内容。此外,这似乎只使用单个括号工作正常,这可能更便携(请参阅here)。

适用于Bash 4.2.47

答案 1 :(得分:1)

是。如果您愿意,可以使用换行符代替;,但始终需要then关键字。

if [ "1" ==  "$(ping -c 1 $ip | grep 'packets transmitted' | cut -d ' ' -f 4)" ]
then echo $ip
fi

# or

if [ "1" ==  "$(ping -c 1 $ip | grep 'packets transmitted' | cut -d ' ' -f 4)" ]
then
    echo $ip
fi