如果语句字符串比较

时间:2016-03-29 14:20:15

标签: if-statement ksh

我在这里做错了什么? 该脚本默认输入此IF语句&显示要退出的echo语句。

#!/bin/ksh


server=$1
dbname=$2
IFS="
"
if [[ "${dbname}" != "abc_def_data" || "${dbname}" != "abc_def01_data" ]]; then
        echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!"
        exit 0
fi

3 个答案:

答案 0 :(得分:1)

!=条件的链接需要一些反思。

我更倾向于使用case ... esac结构来更清晰地测试这些条件。

case "${dbname}" in 
   abc_def_data|abc_def01_data ) 
        #dbg echo "matched, but for real code replace with just a ':' char" 
        :
   ;; 
   * ) 
       echo "didn_t match any expected values for \$dbname"
       echo exit 1
   ;; 
esac

请注意,当您真正尝试查找*)案例时,abc_def_data (etc)匹配的操作可以是任何操作,但只需跳到下一部分代码,您只需要shell的null cmd :

修改1

请注意,我有echo exit 1,如果您将其复制/粘贴到命令行,则shell不会退出。在实际代码中,移除echo并期望exit起作用。

修改2

另请注意,案例匹配(|)中的abc_def_data**|**abc_def01_data字符本质上是OR(我认为它在“案例匹配”上下文中称为其他内容)。

IHTH

答案 1 :(得分:0)

你有没有想过要写这个?

if [[ "${dbname}" != "abc_def_data" && "${dbname}" != "abc_def01_data" ]]; then
        echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!"
        exit 0
fi

答案 2 :(得分:0)

尝试这个男人,它应该工作得很好你应该用“[]”分隔条件并使用-o而不是|| .... 顺便说一下,它对我很有用......

server=$1
dbname=$2
IFS=""

if [ "${dbname}" != "abc_def_data" ] -o [ "${dbname}" != "abc_def01_data" ]
        then
        echo "Msg: Triggers can only be applied to CMS_JAD:abc_def_data/abc_def01_data!"
        exit 0
fi