ksh 中的字符串比较永远不会成功

String comparison in ksh never succeeding

我有下一个脚本,当尝试比较变量值是否等于 "NO" 或 "SI"(在西班牙语中是)时,由于某种原因它不起作用,我一直在通过else (SI) 尽管变量中的实际值是 "NO"。它甚至打印在电子邮件主题中。

我担心我可能是一些看不见的额外隐形角色,但它就在那里?

这是脚本:

#!/usr/bin/ksh

VAR=$(/home/userName/scripts/loadedresource.ksh | egrep 'SI|NO')

MAIL_FILE="testfile.txt"

rm -f $MAIL_FILE

echo "From:Script" > $MAIL_FILE
echo "To:Me<me@company.com>" >> $MAIL_FILE
echo "Subject:RESOURCE LOADED-> $VAR" >> $MAIL_FILE
echo "Content-Type: text/html" >> $MAIL_FILE
echo "<html>" >> $MAIL_FILE
echo "<body style='font-family:calibri;font-size:14px;'>" >> $MAIL_FILE


if [ "$VAR" == "NO" ]
then
    echo "<h2> Resource not loaded, please open ticket </h2>" >> $MAIL_FILE
else
    echo "<h2> Resource loaded successfully </h2>" >> $MAIL_FILE
fi

mail me@company.com < $MAIL_FILE

== 在 POSIX 测试中不是有效的比较运算符。如果您的特定 ksh 实现没有实现添加它的扩展,您可能需要使用

if [ "$VAR" = "NO" ]

而不是

if [ "$VAR" == "NO" ]

如果您的副本有 GNU 扩展,我也会考虑使用 egrep -o 'SI|NO'grep 的输出中省略任何其他字符。


作为另一种选择,请考虑:

result=$(/home/userName/scripts/loadedresource.ksh)
case $result in
  *SI*) echo "Yes" ;;
  *NO*) echo "No" ;;
  *) echo "Unknown" ;;
esac

作为性能提升,顺便说一句:

{
  echo "hello"
  echo "world"
} >output.txt

...比

更有效率
echo "hello" >output.txt
echo "world" >>output.txt

...每行重新打开一次输出文件。