如果块不工作,则bash
我有下面的代码。这里的逻辑是,如果主机列表包含任何blank条目,它应该将类设置为空,否则它应该是红色的。现在我得到了错误- test.sh[3]:第7行的语法错误:'then'意外 有人能帮我吗?谢谢如果块不工作,则bash,bash,shell,Bash,Shell,我有下面的代码。这里的逻辑是,如果主机列表包含任何blank条目,它应该将类设置为空,否则它应该是红色的。现在我得到了错误- test.sh[3]:第7行的语法错误:'then'意外 有人能帮我吗?谢谢 #! /bin/bash file=./HostList.txt { echo "<table>" printf "<tr>" if[%s -eq =""]; then clas
#! /bin/bash
file=./HostList.txt
{
echo "<table>"
printf "<tr>"
if[%s -eq =""]; then
class="blank"
else
class="red"
fi
"<td" $class">%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td>%s</td>
</tr>\n" $(cat "$file"|cut -d'.' -f1)
echo "</table>"
} > table.html
exit 0
#/bin/bash
文件=./HostList.txt
{
回声“”
printf“”
如果[%s-eq=”“];则
class=“空白”
其他的
class=“红色”
fi
%s
%
%
%
%
%
%
%
%
%
%
%
%
\n“$(cat“$文件”|剪切-d'.-f1)
回声“”
}>table.html
出口0
Bash对空格非常敏感。这应该起作用:
if [ "%s" = "" ]; then
请注意,=
用于字符串比较,-eq
用于整数
编辑:
更准确地说,bash将原始代码拆分为:
if[%s # supposedly a command
-eq # parameter
=""] # parameter
; # end of command
then # keyword
此时,Bash意识到有一个不匹配的
then
关键字,如果[%s(这也会失败),它甚至不会尝试运行。Bash对空格非常敏感。这应该可以:
if [ "%s" = "" ]; then
请注意,=
用于字符串比较,-eq
用于整数
编辑:
更准确地说,bash将原始代码拆分为:
if[%s # supposedly a command
-eq # parameter
=""] # parameter
; # end of command
then # keyword
此时,Bash意识到有一个不匹配的then
关键字,甚至没有尝试运行if[%s
(这也会失败)。我不确定HTML标记在那里做什么,但if
语句应该是这样的:
if [[ $something == "" ]] ; then
# do something
fi
换句话说,括号和参数之间至少需要一些空格。我不确定HTML标记在其中做了什么,但是if
语句应该类似于:
if [[ $something == "" ]] ; then
# do something
fi
换句话说,括号和参数之间至少需要一些空格。首先,您的if
语句需要一些空格,而-eq
是不必要的:
if [ %s = "" ]; then
class="blank"
else
class="red"
fi
但更重要的是,%s
不是一个变量,因此您无法将其与任何东西进行比较(或者如注释中所指出的,这是没有用的)。它只是printf
命令的占位符。您必须更明确一点:
hosts=($(cat "$file"))
echo "<table>"
echo "<tr>"
for host in ${hosts[@]}; do
host=$(echo $host | cut -d'.' -f1)
if [ "$host" = "" ]; then
echo "<td class='blank'>"
else
echo "<td class='red'>"
fi
done
echo "</tr>\n"
echo "</table>"
hosts=($(cat“$文件”))
回声“”
回声“”
对于${hosts[@]};do中的主机
主机=$(echo$host | cut-d'.-f1)
如果[“$host”=”],则
回声“”
其他的
回声“”
fi
完成
回显“\n”
回声“”
(前面的已经过最低限度的测试。)首先,您的if
语句需要一些空格,并且-eq
是不必要的:
if [ %s = "" ]; then
class="blank"
else
class="red"
fi
但更重要的是,%s
不是一个变量,因此您无法将其与任何东西进行比较(或者如注释中所指出的,这是没有用的)。它只是printf
命令的占位符。您必须更明确一点:
hosts=($(cat "$file"))
echo "<table>"
echo "<tr>"
for host in ${hosts[@]}; do
host=$(echo $host | cut -d'.' -f1)
if [ "$host" = "" ]; then
echo "<td class='blank'>"
else
echo "<td class='red'>"
fi
done
echo "</tr>\n"
echo "</table>"
hosts=($(cat“$文件”))
回声“”
回声“”
对于${hosts[@]};do中的主机
主机=$(echo$host | cut-d'.-f1)
如果[“$host”=”],则
回声“”
其他的
回声“”
fi
完成
回显“\n”
回声“”
(前面已经过最低限度的测试。)在“=”之后应该有一个空格,fi
之后的行中是否缺少echo
?@Pumbaa80是。请忽略它。字符串“%s”永远不是emtpy字符串,因此比较是没有意义的。通常,如果要检查字符串是否为空,最好使用test-z。(如果[-z%s])注意空格,并且注意这始终是false,因为“%s”不是空字符串。在“=”之后应该有空格fi
之后的行中是否缺少echo
?@Pumbaa80是的。请忽略它。字符串“%s”永远不是emtpy字符串,因此比较没有意义。通常,如果要检查字符串是否为空,最好使用test-z。(如果[-z%s])请注意空格,并注意这始终是错误的,因为“%s”不是空字符串。第5行正在做什么?它应该是if[$host=”“];然后--right?instad of if[$host=“”];您可以将%s与空字符串进行比较,但比较总是错误的。还有下面的问题--test.sh[4]:server1:未找到。其中server1.com是我输入文件中的第一个条目。第5行正在做什么?它应该是if[$host=”“];然后--right?instad of if[$host=“”];您可以将%s与空字符串进行比较,但比较总是错误的。还有下面的问题--test.sh[4]:server1:未找到。其中server1.com是我输入文件中的第一个条目。@grails_enthu,这是因为[
实际上是一个命令,因此它需要与if
关键字和以下参数之间用空格分隔。在=
运算符周围需要空格,因为[
命令在决定做什么之前,首先考虑给出的参数数量。请参阅bash手册:并向下滚动到test
命令。@grails\u enthu,这是因为[
实际上是一个命令,因此它需要与if
关键字和以下参数之间用空格分隔。在=
运算符周围需要空格,因为[
命令在决定做什么之前,首先考虑给出的参数数量。请参阅bash手册:并向下滚动到test
命令。