我有下面的代码。这里的逻辑是如果HostList包含任何blanck条目它应该将类设置为空白,否则它应该是红色。现在我收到错误 -
任何人都可以帮助我吗?谢谢!!
#! /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
答案 0 :(得分:5)
Bash对空白非常敏感。这应该有效:
if [ "%s" = "" ]; then
请注意,=
用于字符串比较,-eq
用于整数。
修改强>
更准确地说,bash会将原始代码拆分为:
if[%s # supposedly a command
-eq # parameter
=""] # parameter
; # end of command
then # keyword
此时,Bash意识到有一个无法匹配的then
关键字,甚至没有尝试运行if[%s
(这也会失败)。
答案 1 :(得分:3)
我不确定HTML标记在那里做了什么,但if
语句应该是这样的:
if [[ $something == "" ]] ; then
# do something
fi
换句话说,在括号和参数之间需要一些空格,至少是这样。
答案 2 :(得分:2)
首先,您的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>"
(前面已经过最低限度的测试。)