此脚本尝试ping主机字符串数组。
for i in "${arr[@]}"
do
echo "check if $i is online"
ping -c1 $i &>/dev/null
if[ $? -eq 0 ] then
echo "$i is online"
else
echo "$i is not online"
fi
done
我是bash脚本的新手,所以如果有人可以告诉我为什么会得到一个
意外标记'else'附近的语法错误
如果这是一个好方法。提前致谢
答案 0 :(得分:4)
第6行应使用分号;
,并且需要在行if
的{{1}}之后留出空格。
if[ $?
更推荐的方法是你可以直接在if语句中使用 if [ $? -eq 0 ]; then
退出代码作为
ping's
请参阅if ping -c 1 "$i" &> /dev/null
then
echo "$i is online"
else
echo "$i is not online"
fi
页面上的以下摘录,了解我使用man ping
标志的原因。
-c
使用http://www.shellcheck.net/来调试此类琐碎的语法错误。
答案 1 :(得分:4)
[
不属于bash
语法的一部分;它是常规字符,如a
或8
。因此,解析器无法将if[
识别为两个单词if
和[
;它只是看到名称if[
,它假定它可能是一个命令名,后跟一行终止于行尾的参数。以下行也是有效命令。但是, next 行以else
开头,if
是一个可识别的关键字,因此不能出现在命令位置,而只能作为正在进行的if
语句的一部分,触发错误。
所有这些都是说,必须将[
和if [ $? -eq 0 ]; then
与空格分开。
then
(如果Select
出现在同一行,你还需要一个分号,这是修复空间问题后遇到的下一个问题。)
答案 2 :(得分:2)
if [ $? -eq 0 ]; then
您需要在if
和[
之间留出空格,而且您错过了;