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
...每行重新打开一次输出文件。
我有下一个脚本,当尝试比较变量值是否等于 "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
...每行重新打开一次输出文件。