通配符表达式比较不起作用

时间:2016-07-11 04:46:28

标签: bash shell if-statement comparison sh

我需要比较输入文件的第二行是否包含字符串premium-world-check.xsd。如果它存在,我不需要做任何事情。 如果它不存在,我需要添加到另一个文件。

我有以下输入文件,

<?xml version="1.0" encoding="UTF-8"?>
<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">
<record category="INDIVIDUAL">
<tag1>
<tag2>
....
</tag2>
</tag1>

以下是我的代码,

xsdFlag=`sed -n '2p' ${myInputFile}`
if [ $xsdFlag == *"premium-world-check.xsd"* ]
then
    echo "Prepending not required"
else
    echo "<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile}
    echo "<?xml version="1.0" encoding="UTF-8"?>" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile}
    echo "PREPENDING:"
fi

我在if条件下遇到了未知的运算符。

1 个答案:

答案 0 :(得分:3)

像这样试试;我做了几个修复。

xsdFlag=`sed -n '2p' "$myInputFile"`

if [[ "$xsdFlag" == *"premium-world-check.xsd"* ]]; then
    echo "Prepending not required"
else
    echo '<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile"
    echo '<?xml version="1.0" encoding="UTF-8"?>' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile"
    echo "PREPENDING:"
fi

一个问题是使用标准POSIX [ ... ]而不是Bash [[ ... ]],您需要使用通配符。

另一个问题是你没有在XML字符串中转义引号。我将外部引号从双引号更改为单引号来修复此问题。

您也没有引用您的文件名,这是防止错误包含空格所必需的。